public ArraySubQueryPostgreSQL(Column arrayColumn, String alias) { super(arrayColumn, alias); dialect = arrayColumn.getTable().getDialect(); fakeSubqueryTableAlias = new TableAlias(arrayColumn.getTable(), alias); }
/** * Returns null or {@code AND isdeleted IS NULL} if soft delete is activated. * * @return the clause, or null */ public String getSoftDeleteClause() { if (softDeleteEnabled) { return database.getTable(Model.HIER_TABLE_NAME).getColumn(Model.MAIN_IS_DELETED_KEY).getFullQuotedName() + " IS NULL"; } else { return null; } }
@Override public int doSetFieldValue(PreparedStatement ps, int index, Column column) throws SQLException { column.setToPreparedStatement(ps, index, value); return index + 1; } }
protected void postProcessClusterNodes() { Collection<Column> columns = table.getColumns(); Insert insert = new Insert(table); for (Column column : columns) { insert.addColumn(column); } createClusterNodeSql = insert.getStatement(); createClusterNodeColumns = new ArrayList<>(columns); Delete delete = new Delete(table); Column column = table.getColumn(Model.CLUSTER_NODES_NODEID_KEY); delete.setWhere(column.getQuotedName() + " = ?"); deleteClusterNodeSql = delete.getStatement(); deleteClusterNodeColumn = column; }
protected void postProcessClusterInvalidations() { clusterInvalidationsColumns = Arrays.asList(table.getColumn(Model.CLUSTER_INVALS_NODEID_KEY), table.getColumn(Model.CLUSTER_INVALS_ID_KEY), table.getColumn(Model.CLUSTER_INVALS_FRAGMENTS_KEY), table.getColumn(Model.CLUSTER_INVALS_KIND_KEY)); Delete delete = new Delete(table); Column column = table.getColumn(Model.CLUSTER_INVALS_NODEID_KEY); delete.setWhere(column.getQuotedName() + " = ?"); deleteClusterInvalsSql = delete.getStatement(); deleteClusterInvalsColumn = column; }
@Override public String toSql() { Table table = arrayColumn.getTable(); return String.format("(SELECT %s, UNNEST(%s) AS %s, generate_subscripts(%s, 1) AS %s FROM %s) ", table.getColumn(Model.MAIN_KEY).getQuotedName(), arrayColumn.getQuotedName(), Model.COLL_TABLE_VALUE_KEY, arrayColumn.getQuotedName(), Model.COLL_TABLE_POS_KEY, table.getRealTable().getQuotedName()); } }
public static Column addColumn(Table table, String fieldName, ColumnType type, boolean nativeCase) { String physicalName = table.getDialect().getColumnName(fieldName); if (!nativeCase && fieldName.length() == physicalName.length()) { // we can keep the name specified in the config physicalName = fieldName; } Column column = new Column(table, physicalName, type, fieldName); return ((TableImpl) table).addColumn(fieldName, column); }
@Override public Column getSubQueryIdColumn() { Column column = fakeSubqueryTableAlias.getColumn(Model.MAIN_KEY); return new ArraySubQueryPostgreSQLColumn(column.getPhysicalName(), column.getType()); }
@Override public Column getPrimaryColumn() { return new Column(table.getPrimaryColumn(), this); }
/** * Returns the clause used to match a given row by id in the given table. * <p> * Takes into account soft deletes. * * @param tableName the table name * @return the clause, like {@code table.id = ?} */ public String getIdEqualsClause(String tableName) { return database.getTable(tableName).getColumn(Model.MAIN_KEY).getQuotedName() + " = ?" + getSoftDeleteClause(tableName); }
@Override public String getIdentityGeneratedKeySql(Column column) { String table = column.getTable().getPhysicalName(); String seq = table + "_IDSEQ"; return String.format("SELECT \"%s\".CURRVAL FROM DUAL", seq); }
@Override public String getKey() { return table.getKey(); }
@Override public String getMatchMixinType(Column mixinsColumn, String mixin, boolean positive, String[] returnParam) { returnParam[0] = mixin; String sql = "ARRAY[?]::varchar[] <@ " + mixinsColumn.getFullQuotedName(); return positive ? sql : "NOT(" + sql + ")"; }
public SQLHelper(Connection connection, Table table, String policy) { this.table = table; this.connection = connection; this.policy = policy; tableName = table.getPhysicalName(); }
/** * Creates a table as an alias for another one. */ public TableAlias(Table table, String alias) { this.table = table; this.alias = alias; dialect = table.getDialect(); }
/** * Gets the SQL to use to refer to a column in an expression. * <p> * Needed for Oracle CLOB. * * @param column the column used in an expression * @return the SQL to use to refer to it * * @since 10.10 */ public String getQuotedNameForExpression(Column column) { return column.getQuotedName(); }
@Override public int doSetFieldValue(PreparedStatement ps, int index, Column column) throws SQLException { column.setToPreparedStatement(ps, index, from); column.setToPreparedStatement(ps, index + 1, to); return index + 2; }