Search in sources :

Example 16 with TableReferenceFactory

use of org.sql.generation.api.grammar.factories.TableReferenceFactory in project qi4j-sdk by Qi4j.

the class PostgreSQLAppStartup method testRequiredCapabilities.

@Override
protected void testRequiredCapabilities(Connection connection) throws SQLException {
    // If collection structure matching will ever be needed, using ltree as path to each leaf
    // item in
    // collection-generated tree will be very useful
    // ltree module provides specific datatype for such path, which may be indexed in order to
    // greatly improve
    // performance
    Statement stmt = connection.createStatement();
    try {
        DefinitionFactory d = this._vendor.getDefinitionFactory();
        TableReferenceFactory t = this._vendor.getTableReferenceFactory();
        DataTypeFactory dt = this._vendor.getDataTypeFactory();
        stmt.execute(this._vendor.toString(d.createTableDefinitionBuilder().setTableScope(TableScope.LOCAL_TEMPORARY).setTableName(t.tableName("ltree_test")).setCommitAction(PgSQLTableCommitAction.DROP).setTableContentsSource(d.createTableElementListBuilder().addTableElement(d.createColumnDefinition("test_column", dt.userDefined("ltree"))).createExpression()).createExpression()));
    } catch (SQLException sqle) {
        throw new InternalError("It seems that your database doesn't have ltree as type. It is needed to store collections. Please refer to hopefully supplied instructions on how to add ltree type (hint: run <pg_install_dir>/share/contrib/ltree.sql script or command 'CREATE EXTENSION ltree;').");
    } finally {
        SQLUtil.closeQuietly(stmt);
    }
}
Also used : TableReferenceFactory(org.sql.generation.api.grammar.factories.TableReferenceFactory) SQLException(java.sql.SQLException) Statement(java.sql.Statement) DataTypeFactory(org.sql.generation.api.grammar.factories.DataTypeFactory) DefinitionFactory(org.sql.generation.api.grammar.factories.DefinitionFactory)

Example 17 with TableReferenceFactory

use of org.sql.generation.api.grammar.factories.TableReferenceFactory in project qi4j-sdk by Qi4j.

the class AbstractSQLIndexing method createAssoInsert.

protected InsertStatement createAssoInsert(QNameInfo qNameInfo, SQLVendor vendor, Integer amountOfParams) {
    ModificationFactory m = vendor.getModificationFactory();
    LiteralFactory l = vendor.getLiteralFactory();
    ColumnsFactory c = vendor.getColumnsFactory();
    QueryFactory q = vendor.getQueryFactory();
    TableReferenceFactory t = vendor.getTableReferenceFactory();
    BooleanFactory b = vendor.getBooleanFactory();
    String schemaName = this._state.schemaName().get();
    // "INSERT INTO " + "%s" + "." + "%s" + "\n" + //
    // "SELECT " + "?, " + "?, " + ENTITY_TABLE_PK_COLUMN_NAME + "\n" + // <-- here is 4 params
    // when many-asso
    // "FROM " + "%s" + "." + ENTITY_TABLE_NAME + "\n" + //
    // "WHERE " + ENTITY_TABLE_IDENTITY_COLUMN_NAME + " = " + "?";
    QuerySpecificationBuilder qBuilder = q.querySpecificationBuilder();
    for (Integer x = 0; x < amountOfParams; ++x) {
        qBuilder.getSelect().addUnnamedColumns(c.colExp(l.param()));
    }
    qBuilder.getSelect().addUnnamedColumns(c.colName(DBNames.ENTITY_TABLE_PK_COLUMN_NAME));
    qBuilder.getFrom().addTableReferences(t.tableBuilder(t.table(t.tableName(schemaName, DBNames.ENTITY_TABLE_NAME))));
    qBuilder.getWhere().reset(b.eq(c.colName(DBNames.ENTITY_TABLE_IDENTITY_COLUMN_NAME), l.param()));
    return m.insert().setTableName(t.tableName(schemaName, qNameInfo.getTableName())).setColumnSource(m.columnSourceByQuery(q.createQuery(qBuilder.createExpression()))).createExpression();
}
Also used : ModificationFactory(org.sql.generation.api.grammar.factories.ModificationFactory) TableReferenceFactory(org.sql.generation.api.grammar.factories.TableReferenceFactory) QueryFactory(org.sql.generation.api.grammar.factories.QueryFactory) ColumnsFactory(org.sql.generation.api.grammar.factories.ColumnsFactory) QuerySpecificationBuilder(org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder) BooleanFactory(org.sql.generation.api.grammar.factories.BooleanFactory) LiteralFactory(org.sql.generation.api.grammar.factories.LiteralFactory)

Example 18 with TableReferenceFactory

use of org.sql.generation.api.grammar.factories.TableReferenceFactory in project qi4j-sdk by Qi4j.

the class AbstractSQLIndexing method createPropertyInsert.

protected InsertStatement createPropertyInsert(QNameInfo qNameInfo, SQLVendor vendor) {
    String tableName = qNameInfo.getTableName();
    ModificationFactory m = vendor.getModificationFactory();
    TableReferenceFactory t = vendor.getTableReferenceFactory();
    LiteralFactory l = vendor.getLiteralFactory();
    ColumnSourceByValuesBuilder columnBuilder = m.columnSourceByValues().addValues(l.param(), l.param(), l.param());
    if (qNameInfo.getCollectionDepth() > 0) {
        columnBuilder.addValues(l.func("text2ltree", l.param()));
    }
    columnBuilder.addValues(l.param());
    return m.insert().setTableName(t.tableName(this._state.schemaName().get(), tableName)).setColumnSource(columnBuilder.createExpression()).createExpression();
}
Also used : ModificationFactory(org.sql.generation.api.grammar.factories.ModificationFactory) TableReferenceFactory(org.sql.generation.api.grammar.factories.TableReferenceFactory) ColumnSourceByValuesBuilder(org.sql.generation.api.grammar.builders.modification.ColumnSourceByValuesBuilder) LiteralFactory(org.sql.generation.api.grammar.factories.LiteralFactory)

Example 19 with TableReferenceFactory

use of org.sql.generation.api.grammar.factories.TableReferenceFactory in project qi4j-sdk by Qi4j.

the class AbstractSQLIndexing method createInsertStatement.

protected InsertStatement createInsertStatement(String schemaName, String tableName, Integer amountOfColumns, SQLVendor vendor) {
    ModificationFactory m = vendor.getModificationFactory();
    LiteralFactory l = vendor.getLiteralFactory();
    TableReferenceFactory t = vendor.getTableReferenceFactory();
    ColumnSourceByValuesBuilder columnBuilder = m.columnSourceByValues();
    for (Integer x = 0; x < amountOfColumns; ++x) {
        columnBuilder.addValues(l.param());
    }
    return m.insert().setTableName(t.tableName(schemaName, tableName)).setColumnSource(columnBuilder.createExpression()).createExpression();
}
Also used : ModificationFactory(org.sql.generation.api.grammar.factories.ModificationFactory) TableReferenceFactory(org.sql.generation.api.grammar.factories.TableReferenceFactory) ColumnSourceByValuesBuilder(org.sql.generation.api.grammar.builders.modification.ColumnSourceByValuesBuilder) LiteralFactory(org.sql.generation.api.grammar.factories.LiteralFactory)

Example 20 with TableReferenceFactory

use of org.sql.generation.api.grammar.factories.TableReferenceFactory in project qi4j-sdk by Qi4j.

the class AbstractSQLIndexing method createUpdateEntityTableStatement.

protected UpdateStatement createUpdateEntityTableStatement(String schemaName, SQLVendor vendor) {
    ModificationFactory m = vendor.getModificationFactory();
    BooleanFactory b = vendor.getBooleanFactory();
    LiteralFactory l = vendor.getLiteralFactory();
    ColumnsFactory c = vendor.getColumnsFactory();
    TableReferenceFactory t = vendor.getTableReferenceFactory();
    // "UPDATE " + "%s" + "." + ENTITY_TABLE_NAME + "\n" + //
    // "SET " + ENTITY_TABLE_IDENTITY_COLUMN_NAME + " = ?, " + //
    // ENTITY_TABLE_MODIFIED_COLUMN_NAME + " = ?, " + //
    // ENTITY_TABLE_VERSION_COLUMN_NAME + " = ?, " + //
    // ENTITY_TABLE_APPLICATION_VERSION_COLUMN_NAME + " = ?" + "\n" + //
    // "WHERE " + ENTITY_TABLE_PK_COLUMN_NAME + " = ?" + "\n" + //
    // ";" //
    UpdateSourceByExpression paramSource = m.updateSourceByExp(l.param());
    UpdateBySearchBuilder builder = m.updateBySearch();
    builder.setTargetTable(m.createTargetTable(t.tableName(schemaName, DBNames.ENTITY_TABLE_NAME))).addSetClauses(m.setClause(DBNames.ENTITY_TABLE_IDENTITY_COLUMN_NAME, paramSource), m.setClause(DBNames.ENTITY_TABLE_MODIFIED_COLUMN_NAME, paramSource), m.setClause(DBNames.ENTITY_TABLE_VERSION_COLUMN_NAME, paramSource), m.setClause(DBNames.ENTITY_TABLE_APPLICATION_VERSION_COLUMN_NAME, paramSource)).getWhereBuilder().reset(b.eq(c.colName(DBNames.ENTITY_TABLE_PK_COLUMN_NAME), l.param()));
    return builder.createExpression();
}
Also used : UpdateSourceByExpression(org.sql.generation.api.grammar.modification.UpdateSourceByExpression) ModificationFactory(org.sql.generation.api.grammar.factories.ModificationFactory) TableReferenceFactory(org.sql.generation.api.grammar.factories.TableReferenceFactory) UpdateBySearchBuilder(org.sql.generation.api.grammar.builders.modification.UpdateBySearchBuilder) ColumnsFactory(org.sql.generation.api.grammar.factories.ColumnsFactory) BooleanFactory(org.sql.generation.api.grammar.factories.BooleanFactory) LiteralFactory(org.sql.generation.api.grammar.factories.LiteralFactory)

Aggregations

TableReferenceFactory (org.sql.generation.api.grammar.factories.TableReferenceFactory)21 LiteralFactory (org.sql.generation.api.grammar.factories.LiteralFactory)11 ColumnsFactory (org.sql.generation.api.grammar.factories.ColumnsFactory)10 ModificationFactory (org.sql.generation.api.grammar.factories.ModificationFactory)9 BooleanFactory (org.sql.generation.api.grammar.factories.BooleanFactory)8 QuerySpecificationBuilder (org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder)6 QueryFactory (org.sql.generation.api.grammar.factories.QueryFactory)6 SQLVendor (org.sql.generation.api.vendor.SQLVendor)5 Statement (java.sql.Statement)4 QNameInfo (org.qi4j.index.sql.support.common.QNameInfo)4 DefinitionFactory (org.sql.generation.api.grammar.factories.DefinitionFactory)4 BigInteger (java.math.BigInteger)3 PreparedStatement (java.sql.PreparedStatement)3 ResultSet (java.sql.ResultSet)3 ColumnSourceByValuesBuilder (org.sql.generation.api.grammar.builders.modification.ColumnSourceByValuesBuilder)3 InsertStatement (org.sql.generation.api.grammar.modification.InsertStatement)3 Stack (java.util.Stack)2 QualifiedName (org.qi4j.api.common.QualifiedName)2 QNameType (org.qi4j.index.sql.support.common.QNameInfo.QNameType)2 BooleanBuilder (org.sql.generation.api.grammar.builders.booleans.BooleanBuilder)2