@Override public Void visit(ParamExpression<?> param, Void context) { append("?"); constants.add(param); if (constantPaths.size() < constants.size()) { constantPaths.add(null); } return null; }
protected void handleJoinTarget(JoinExpression je) { // type specifier if (je.getTarget() instanceof RelationalPath && templates.isSupportsAlias()) { final RelationalPath<?> pe = (RelationalPath<?>) je.getTarget(); if (pe.getMetadata().getParent() == null) { SchemaAndTable schemaAndTable = getSchemaAndTable(pe); boolean precededByDot; if (templates.isPrintSchema()) { appendSchemaName(schemaAndTable.getSchema()); append("."); precededByDot = true; } else { precededByDot = false; } appendTableName(schemaAndTable.getTable(), precededByDot); append(templates.getTableAlias()); } } inJoin = true; handle(je.getTarget()); inJoin = false; }
protected void appendTableName(String table, boolean precededByDot) { append(templates.quoteIdentifier(table, precededByDot)); }
protected void appendSchemaName(String schema) { append(templates.quoteIdentifier(schema)); }
if (useLiterals) { if (constant instanceof Collection) { append("("); boolean first = true; for (Object o : ((Collection)constant)) { if (!first) { append(COMMA); append(configuration.asLiteral(o)); first = false; append(")"); } else { append(configuration.asLiteral(constant)); append("("); boolean first = true; for (Object o : ((Collection) constant)) { if (!first) { append(COMMA); append("?"); constants.add(o); if (first && (constantPaths.size() < constants.size())) { append(")"); super.visitOperation(constant.getClass(), SQLOps.CAST, ImmutableList.<Expression<?>>of(Q, type)); } else {
append(templates.getMergeInto()); handle(entity); dmlWithSchema = false; append(" "); append("(").handle(COMMA, columns).append(") "); skipParent = false; append(templates.getKey()); skipParent = true; append("(").handle(COMMA, keys).append(") "); skipParent = false; append("\n"); serialize(subQuery.getMetadata(), false); } else { append(templates.getValues()); append("(").handle(COMMA, values).append(") ");
append(templates.getInsertInto()); append(" ("); skipParent = true; handle(COMMA, columns); skipParent = false; append(")"); append("\n"); serialize(subQuery.getMetadata(), false); append(templates.getValues()); append("("); handle(COMMA, values); append(")"); } else { append(templates.getDefaultValues());
for (final OrderSpecifier<?> os : orderBy) { if (!first) { append(COMMA); if (templates.getNullsFirst() != null) { handle(os.getTarget()); append(order); append(templates.getNullsFirst()); } else { append("(case when "); handle(os.getTarget()); append(" is null then 0 else 1 end), "); handle(os.getTarget()); append(order); append(order); append(templates.getNullsLast()); } else { append("(case when "); handle(os.getTarget()); append(" is null then 1 else 0 end), "); handle(os.getTarget()); append(order); append(order);
append(templates.getUpdate()); handle(entity); dmlWithSchema = false; append("\n"); append(templates.getSet()); boolean first = true; skipParent = true; for (final Pair<Path<?>,Expression<?>> update : updates) { if (!first) { append(COMMA); append(" = "); if (!useLiterals && update.getSecond() instanceof Constant<?>) { constantPaths.add(update.getFirst()); append(templates.getWhere()).handle(metadata.getWhere());
void serializeForDelete(QueryMetadata metadata, RelationalPath<?> entity) { serialize(Position.START, metadata.getFlags()); if (!serialize(Position.START_OVERRIDE, metadata.getFlags())) { append(templates.getDelete()); } serialize(Position.AFTER_SELECT, metadata.getFlags()); append("from "); dmlWithSchema = true; handle(entity); dmlWithSchema = false; if (metadata.getWhere() != null) { append(templates.getWhere()).handle(metadata.getWhere()); } }
@Override protected void serializeModifiers(QueryMetadata metadata, SQLSerializer context) { QueryModifiers mod = metadata.getModifiers(); context.append(limitOffsetStart); if (!metadata.getOrderBy().isEmpty()) { context.handleOrderBy(metadata.getOrderBy()); } else { context.append("1"); } context.append(")"); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else if (mod.getOffset() == null) { context.handle(limitTemplate, mod.getLimit()); } else { context.handle(limitOffsetTemplate, mod.getOffset() + 1, mod.getOffset() + mod.getLimit()); } }
String dummyTable = templates.getDummyTable(); if (!Strings.isNullOrEmpty(dummyTable)) { append(templates.getFrom()); append(dummyTable); append(templates.getFrom()); for (int i = 0; i < joins.size(); i++) { final JoinExpression je = joins.get(i); if (je.getFlags().isEmpty()) { if (i > 0) { append(templates.getJoinSymbol(je.getType())); append(templates.getOn()).handle(je.getCondition()); append(templates.getJoinSymbol(je.getType())); serialize(JoinFlag.Position.BEFORE_CONDITION, je.getFlags()); if (je.getCondition() != null) { append(templates.getOn()).handle(je.getCondition());
@Override public void serialize(QueryMetadata metadata, boolean forCountRow, SQLSerializer context) { if (!forCountRow && metadata.getModifiers().isRestricting() && !metadata.getJoins().isEmpty()) { QueryModifiers mod = metadata.getModifiers(); if (mod.getOffset() == null) { context.append(limitQueryStart); context.serializeForQuery(metadata, forCountRow); context.handle(limitQueryEnd, mod.getLimit()); } else { context.append(outerQueryStart); context.serializeForQuery(metadata, forCountRow); context.append(outerQueryEnd); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); } else { context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit()); } } } else { context.serializeForQuery(metadata, forCountRow); } if (!metadata.getFlags().isEmpty()) { context.serialize(Position.END, metadata.getFlags()); } }
protected void appendAsColumnName(Path<?> path, boolean precededByDot) { String column = ColumnMetadata.getName(path); if (path.getMetadata().getParent() instanceof RelationalPath) { RelationalPath<?> parent = (RelationalPath<?>)path.getMetadata().getParent(); column = configuration.getColumnOverride(parent.getSchemaAndTable(), column); } append(templates.quoteIdentifier(column, precededByDot)); }
context.handle(limitTemplate, mod.getLimit()); } else { context.append(outerQueryStart); metadata = metadata.clone(); WindowFunction<Long> rn = SQLExpressions.rowNumber().over(); metadata.clearOrderBy(); context.serializeForQuery(metadata, forCountRow); context.append(outerQueryEnd); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit() + mod.getOffset()); context.append(outerQuerySuffix);
context.serializeForQuery(metadata, forCountRow); } else { context.append(outerQueryStart); metadata = metadata.clone(); WindowFunction<Long> rn = SQLExpressions.rowNumber().over(); metadata.clearOrderBy(); context.serializeForQuery(metadata, forCountRow); context.append(outerQueryEnd); if (mod.getLimit() == null) { context.handle(offsetTemplate, mod.getOffset()); context.handle(limitOffsetTemplate, mod.getOffset(), mod.getLimit() + mod.getOffset()); context.append(outerQuerySuffix);