public void printParameter(ParameterExpression expression) { try { getCall().appendTranslationParameter(getWriter(), expression, getPlatform(), getTranslationRow()); } catch (IOException exception) { throw ValidationException.fileError(exception); } }
/** * INTERNAL: * Print SQL onto the stream, using the ExpressionPrinter for context */ @Override public void printSQL(ExpressionSQLPrinter printer) { printer.printField(getAliasedField()); }
/** * INTERNAL: * Append the constant value into the printer */ public void writeFields(ExpressionSQLPrinter printer, Vector newFields, SQLSelectStatement statement) { if (printer.getPlatform().isDynamicSQLRequiredForFunctions()) { printer.getCall().setUsesBinding(false); } //print ", " before each selected field except the first one if (printer.isFirstElementPrinted()) { printer.printString(", "); } else { printer.setIsFirstElementPrinted(true); } // This field is a constant value, so any name can be used. newFields.addElement(new DatabaseField("*")); printSQL(printer); } }
@SuppressWarnings("unchecked") private String printOmittingForUpdate(SQLSelectStatement statement, ExpressionSQLPrinter printer, Vector fields) { boolean originalShouldPrintForUpdate = this.shouldPrintForUpdateClause; Writer originalWriter = printer.getWriter(); this.shouldPrintForUpdateClause = false; printer.setWriter(new StringWriter()); fields.addAll(statement.printSQL(printer)); String query = printer.getWriter().toString(); this.shouldPrintForUpdateClause = originalShouldPrintForUpdate; printer.setWriter(originalWriter); return query; }
/** * Print the table's SQL from clause. */ public void printSQL(ExpressionSQLPrinter printer) throws IOException { printer.getWriter().write(getQualifiedNameDelimited(printer.getPlatform())); }
ExpressionSQLPrinter printer = new ExpressionSQLPrinter(session, getTranslationRow(), call, false, getBuilder()); printer.setWriter(writer); printer.printExpression(getWhereClause());
/** * INTERNAL: * Print SQL onto the stream, using the ExpressionPrinter for context */ public void printSQL(ExpressionSQLPrinter printer) { if (printer.shouldPrintParameterValues()) { Object value = getValue(printer.getTranslationRow(), printer.getSession()); if (value instanceof Collection) { printer.printValuelist((Collection)value); }else{ if(getField() == null) { printer.printPrimitive(value); } else { printer.printParameter(this); } } } else { if (getField() != null) { printer.printParameter(this); } } }
public EclipseLinkFunctionRenderContext(List<Expression> arguments, AbstractSession session, ExpressionSQLPrinter printer) { this.argumentIndices = new int[arguments.size()]; Arrays.fill(this.argumentIndices, -1); this.arguments = arguments; this.argumentStrings = new String[arguments.size()]; // Since there are no public getters we can use to extract the translation row or whether we should print qualified names, we render dummy expressions Writer oldWriter = printer.getWriter(); try { StringWriter stringWriter = new StringWriter(); printer.setWriter(stringWriter); printer.printField(new DatabaseField("x.x")); boolean printQualifiedNames = stringWriter.getBuffer().indexOf(".") != -1; ParameterExpressionMock parameterExpressionMock = new ParameterExpressionMock(); parameterExpressionMock.printSQL(printer); List<?> parameters = printer.getCall().getParameters(); parameters.remove(parameters.size() - 1); List<?> parameterTypes = printer.getCall().getParameterTypes(); parameterTypes.remove(parameterTypes.size() - 1); stringWriter.getBuffer().setLength(0); expressionSQLPrinter = new ExpressionSQLPrinter(session, parameterExpressionMock.translationRow, datasourceCallMock, printQualifiedNames, new ExpressionBuilder()); expressionSQLPrinter.setWriter(stringWriter); } finally { printer.setWriter(oldWriter); } }
protected void writeField(ExpressionSQLPrinter printer, DatabaseField field, SQLSelectStatement statement) { if (this.field == field){ //print ", " before each selected field except the first one if (printer.isFirstElementPrinted()) { printer.printString(", "); } else { printer.setIsFirstElementPrinted(true); } printSQL(printer); } else { super.writeField(printer, field, statement); } }
/** * Print the pagination SQL using HSQL syntax "SELECT LIMIT <first> <max>". */ @Override public void printSQLSelectStatement(DatabaseCall call, ExpressionSQLPrinter printer, SQLSelectStatement statement) { int max = 0; if (statement.getQuery() != null) { max = statement.getQuery().getMaxRows(); } if (max <= 0 || !(this.shouldUseRownumFiltering())) { super.printSQLSelectStatement(call, printer, statement); return; } statement.setUseUniqueFieldAliases(true); printer.printString("SELECT LIMIT "); printer.printParameter(DatabaseCall.FIRSTRESULT_FIELD); printer.printString(" "); printer.printParameter(DatabaseCall.MAXROW_FIELD); Writer writer = printer.getWriter(); // Need to trim the SELECT from the SQL. printer.setWriter(new StringWriter()); call.setFields(statement.printSQL(printer)); String sql = printer.getWriter().toString(); printer.setWriter(writer); printer.printString(sql.substring(6, sql.length())); call.setIgnoreFirstRowMaxResultsSettings(true); }
/** * Print the sub query to the printer. */ public void printSQL(ExpressionSQLPrinter printer) { ReportQuery query = getSubQuery(); printer.printString("("); if (query.isCallQuery()) { printCustomSQL(printer); } else { SQLSelectStatement statement = (SQLSelectStatement)((ExpressionQueryMechanism)query.getQueryMechanism()).getSQLStatement(); boolean isFirstElementPrinted = printer.isFirstElementPrinted(); printer.setIsFirstElementPrinted(false); boolean requiresDistinct = printer.requiresDistinct(); statement.printSQL(printer); printer.setIsFirstElementPrinted(isFirstElementPrinted); printer.setRequiresDistinct(requiresDistinct); } printer.printString(")"); }
private void printLockStartWithPrimaryKeyFields(SQLSelectStatement statement, ExpressionSQLPrinter printer) { printer.printString(LOCK_START_PREFIX); Iterator<DatabaseField> iterator = statement.getQuery().getDescriptor().getPrimaryKeyFields().iterator(); while (iterator.hasNext()) { DatabaseField field = iterator.next(); DatabaseTable alias = statement.getExpressionBuilder().aliasForTable(field.getTable()); printer.printField(field, alias); if(iterator.hasNext()) { printer.printString(","); } } printer.printString(LOCK_START_SUFFIX); }
public void printPrimitive(Object value) { if (value instanceof Collection) { printValuelist((Collection)value); return; } session.getPlatform().appendLiteralToCall(getCall(), getWriter(), value); }
/** * INTERNAL: * Print SQL */ public void printSQL(ExpressionSQLPrinter printer) { ExpressionOperator realOperator = getPlatformOperator(printer.getPlatform()); printer.printString("("); realOperator.printDuo(this.firstChild, this.secondChild, printer); printer.printString(")"); }
/** * Check if the expression is an equal null expression, these must be handle in a special way in SQL. */ public boolean isNotEqualNull(ExpressionSQLPrinter printer) { if (isObjectComparison(printer.getSession())) { return false; } else if (this.operator.getSelector() != ExpressionOperator.NotEqual) { return false; } else if (this.secondChild.isConstantExpression() && (((ConstantExpression)this.secondChild).getValue() == null)) { return true; } else if (this.secondChild.isParameterExpression() && (printer.getTranslationRow() != null) && (((ParameterExpression)this.secondChild).getValue(printer.getTranslationRow(), printer.getSession()) == null)) { return true; } else { return false; } }
/** * Build the call, setting the query first, this is required in some cases when the query info is required to print the SQL. */ public DatabaseCall buildCall(AbstractSession session, DatabaseQuery query) { SQLCall call = new SQLCall(); call.setQuery(query); call.returnManyRows(); Writer writer = new CharArrayWriter(200); ExpressionSQLPrinter printer = new ExpressionSQLPrinter(session, getTranslationRow(), call, requiresAliases(), getBuilder()); printer.setWriter(writer); session.getPlatform().printSQLSelectStatement(call, printer, this); call.setSQLString(writer.toString()); return call; }
/** * Print the sub query to the printer. */ protected void printCustomSQL(ExpressionSQLPrinter printer) { /* * modified for bug#2658466. This fix ensures that Custom SQL sub-queries are translated * and have variables substituted with values correctly. */ SQLCall call = (SQLCall)getSubQuery().getCall(); call.translateCustomQuery(); printer.getCall().getParameters().addAll(call.getParameters()); printer.getCall().getParameterTypes().addAll(call.getParameterTypes()); printer.printString(call.getCallString()); }
public void printString(String value) { try { getWriter().write(value); } catch (IOException exception) { throw ValidationException.fileError(exception); } }
if(printer.getSession().getPlatform().shouldPrintLockingClauseAfterWhereClause()) { ExpressionBuilder clonedBuilder = statement.getBuilder(); printer.printString(printer.getSession().getPlatform().getSelectForUpdateOfString()); printer.setIsFirstElementPrinted(false); for (Expression next : getLockedExpressions()) { printer.printString(printer.getSession().getPlatform().getNoWaitString());