/** * Creates table names for given types. */ protected String[] createTypesTableNames(final Class[] types) { String[] names = new String[types.length]; for (int i = 0; i < types.length; i++) { if (types[i] == null) { names[i] = null; continue; } DbEntityDescriptor ded = dbEntityManager.lookupType(types[i]); if (ded != null) { String tableName = ded.getTableName(); tableName = tableName.toUpperCase(); names[i] = tableName; } } return names; }
/** * Appends alias. */ protected void appendAlias(final StringBuilder query, final DbEntityDescriptor ded, final DbEntityColumnDescriptor dec) { final ColumnAliasType columnAliasType = templateData.getColumnAliasType(); if (columnAliasType == null || columnAliasType == ColumnAliasType.TABLE_REFERENCE) { final String tableName = ded.getTableName(); final String columnName = dec.getColumnNameForQuery(); templateData.registerColumnDataForTableRef(tableRef, tableName); query.append(tableRef).append(columnAliasSeparator).append(columnName); } else if (columnAliasType == ColumnAliasType.COLUMN_CODE) { final String tableName = ded.getTableName(); final String columnName = dec.getColumnName(); final String code = templateData.registerColumnDataForColumnCode(tableName, columnName); query.append(code); } else if (columnAliasType == ColumnAliasType.TABLE_NAME) { final String tableName = ded.getTableNameForQuery(); final String columnName = dec.getColumnNameForQuery(); query.append(tableName).append(columnAliasSeparator).append(columnName); } }
/** * Removes entity and returns removed descriptor. */ public <E> DbEntityDescriptor<E> removeEntity(final Class<E> type) { DbEntityDescriptor<E> ded = descriptorsMap.remove(type); if (ded == null) { ded = createDbEntityDescriptor(type); } entityNamesMap.remove(ded.getEntityName()); tableNamesMap.remove(ded.getTableName()); return ded; }
/** * Simply appends column name with optional table reference and alias. */ protected void appendColumnName(final StringBuilder query, final DbEntityDescriptor ded, final DbEntityColumnDescriptor dec) { query.append(resolveTable(tableRef, ded)).append('.').append(dec.getColumnName()); if (templateData.getColumnAliasType() != null) { // create column aliases query.append(AS); switch (templateData.getColumnAliasType()) { case TABLE_NAME: { final String tableName = ded.getTableNameForQuery(); query.append(tableName).append(columnAliasSeparator).append(dec.getColumnNameForQuery()); break; } case TABLE_REFERENCE: { final String tableName = ded.getTableName(); templateData.registerColumnDataForTableRef(tableRef, tableName); query.append(tableRef).append(columnAliasSeparator).append(dec.getColumnNameForQuery()); break; } case COLUMN_CODE: { final String tableName = ded.getTableName(); final String code = templateData.registerColumnDataForColumnCode(tableName, dec.getColumnName()); query.append(code); break; } } } }
/** * Registers entity. {@link #registerType(Class) Registers types} and table names. */ public <E> DbEntityDescriptor<E> registerEntity(final Class<E> type) { DbEntityDescriptor<E> ded = registerType(type); DbEntityDescriptor existing = tableNamesMap.put(ded.getTableName(), ded); if (existing != null) { if (ded.getType() == type) { return ded; } throw new DbOomException("Entity registration failed! Table '" + ded.getTableName() + "' already mapped to an entity: " + existing.getType()); } return ded; }
public void printEntities(final int width) { if (!databaseEnabled) { return; } final List<DbEntityDescriptor> list = new ArrayList<>(); dbOom.entityManager().forEachEntity(list::add); if (list.isEmpty()) { return; } final Print print = new Print(); print.line("Entities", width); list.stream() .sorted(Comparator.comparing(DbEntityDescriptor::getEntityName)) .forEach(ded -> print.outLeftRightNewLine( Chalk256.chalk().yellow(), ded.getTableName(), Chalk256.chalk().blue(), ClassUtil.getShortClassName(ded.getType(), 2), width)); print.line(width); } }
/** * Resolves column db sql type and populates it in column descriptor if missing. */ protected void resolveColumnDbSqlType(final Connection connection, final DbEntityColumnDescriptor dec) { if (dec.dbSqlType != SqlType.DB_SQLTYPE_UNKNOWN) { return; } ResultSet rs = null; DbEntityDescriptor ded = dec.getDbEntityDescriptor(); try { DatabaseMetaData dmd = connection.getMetaData(); rs = dmd.getColumns(null, ded.getSchemaName(), ded.getTableName(), dec.getColumnName()); if (rs.next()) { dec.dbSqlType = rs.getInt("DATA_TYPE"); } else { dec.dbSqlType = SqlType.DB_SQLTYPE_NOT_AVAILABLE; if (log.isWarnEnabled()) { log.warn("Column SQL type not available: " + ded.toString() + '.' + dec.getColumnName()); } } } catch (SQLException sex) { dec.dbSqlType = SqlType.DB_SQLTYPE_NOT_AVAILABLE; if (log.isWarnEnabled()) { log.warn("Column SQL type not resolved: " + ded.toString() + '.' + dec.getColumnName(), sex); } } finally { DbUtil.close(rs); } }
/** * Registers just type and entity names. Enough for most usages. */ public <E> DbEntityDescriptor<E> registerType(final Class<E> type) { DbEntityDescriptor<E> ded = createDbEntityDescriptor(type); DbEntityDescriptor<E> existing = descriptorsMap.put(type, ded); if (log.isDebugEnabled()) { log.debug("Register " + type.getName() + " as " + ded.getTableName()); } if (existing != null) { if (ded.getType() == type) { return ded; } throw new DbOomException("Type already registered: " + existing.getType()); } existing = entityNamesMap.put(ded.getEntityName(), ded); if (existing != null) { throw new DbOomException("Name '" + ded.getEntityName() + "' already mapped to an entity: " + existing.getType()); } return ded; }
/** * Creates SELECT criteria for the entity matched by foreign key. * Foreign key is created by concatenating foreign table name and column name. */ public DbSqlBuilder findForeign(final Class entity, final Object value) { final String tableRef = createTableRefName(entity); final DbEntityDescriptor dedFk = entityManager.lookupType(value.getClass()); final String tableName = dbOomConfig.getTableNames().convertTableNameToEntityName(dedFk.getTableName()); final String columnName = dbOomConfig.getColumnNames().convertColumnNameToPropertyName(dedFk.getIdColumnName()); final String fkColumn = uncapitalize(tableName) + capitalize(columnName); final Object idValue = BeanUtil.pojo.getProperty(value, dedFk.getIdPropertyName()); return sql().$(SELECT).column(tableRef).$(FROM).table(entity, tableRef).$(WHERE).ref(tableRef, fkColumn).$(EQUALS).columnValue(idValue); }
assertEquals("TESTER", ded.getTableName()); assertEquals("tester", ded.getTableName()); assertEquals("Tester", ded.getTableName());
@Override public void process(StringBuilder out) { separateByCommaOrSpace(out); out.append(ded.getTableName()); if (tableAlias != null) { out.append(' ').append(tableAlias); } }
/** * Resolves table name or alias that will be used in the query. */ protected String resolveTable(String tableRef, DbEntityDescriptor ded) { String tableAlias = templateData.getTableAlias(tableRef); if (tableAlias != null) { return tableAlias; } return ded.getTableName(); }
/** * Removes entity. */ public DbEntityDescriptor removeEntity(Class type) { DbEntityDescriptor ded = descriptorsMap.remove(type); if (ded == null) { ded = createDbEntityDescriptor(type); } entityNamesMap.remove(ded.getEntityName()); tableNamesMap.remove(ded.getTableName()); return ded; }
/** * Registers entity. {@link #registerType(Class) Registers types} and table names. * Throw exception is type is already registered. */ public DbEntityDescriptor registerEntity(Class type) { DbEntityDescriptor ded = registerType(type); DbEntityDescriptor existing = tableNamesMap.put(ded.getTableName(), ded); if (existing != null) { throw new DbOomException("Entity registration failed! Table '" + ded.getTableName() + "' already mapped to an entity class: " + existing.getType()); } return ded; }
/** * Creates table names for given types. */ protected String[] createTypesTableNames(final Class[] types) { String[] names = new String[types.length]; for (int i = 0; i < types.length; i++) { if (types[i] == null) { names[i] = null; continue; } DbEntityDescriptor ded = dbEntityManager.lookupType(types[i]); if (ded != null) { String tableName = ded.getTableName(); tableName = tableName.toUpperCase(); names[i] = tableName; } } return names; }
/** * Removes entity and returns removed descriptor. */ public <E> DbEntityDescriptor<E> removeEntity(final Class<E> type) { DbEntityDescriptor<E> ded = descriptorsMap.remove(type); if (ded == null) { ded = createDbEntityDescriptor(type); } entityNamesMap.remove(ded.getEntityName()); tableNamesMap.remove(ded.getTableName()); return ded; }
/** * Registers entity. {@link #registerType(Class) Registers types} and table names. */ public <E> DbEntityDescriptor<E> registerEntity(final Class<E> type) { DbEntityDescriptor<E> ded = registerType(type); DbEntityDescriptor existing = tableNamesMap.put(ded.getTableName(), ded); if (existing != null) { if (ded.getType() == type) { return ded; } throw new DbOomException("Entity registration failed! Table '" + ded.getTableName() + "' already mapped to an entity: " + existing.getType()); } return ded; }
/** * Appends alias. */ protected void appendAlias(StringBuilder query, DbEntityDescriptor ded, String column) { String tableName = ded.getTableName(); ColumnAliasType columnAliasType = templateData.getColumnAliasType(); String columnAliasSeparator = templateData.getDbOomManager().getColumnAliasSeparator(); if (columnAliasType == null || columnAliasType == ColumnAliasType.TABLE_REFERENCE) { templateData.registerColumnDataForTableRef(tableRef, tableName); query.append(tableRef).append(columnAliasSeparator).append(column); } else if (columnAliasType == ColumnAliasType.COLUMN_CODE) { String code = templateData.registerColumnDataForColumnCode(tableName, column); query.append(code); } else if (columnAliasType == ColumnAliasType.TABLE_NAME) { query.append(tableName).append(columnAliasSeparator).append(column); } }
/** * Creates SELECT criteria for the entity matched by foreign key. * Foreign key is created by concatenating foreign table name and column name. */ public DbSqlBuilder findForeign(final Class entity, final Object value) { final String tableRef = createTableRefName(entity); final DbEntityDescriptor dedFk = entityManager.lookupType(value.getClass()); final String tableName = dbOomConfig.getTableNames().convertTableNameToEntityName(dedFk.getTableName()); final String columnName = dbOomConfig.getColumnNames().convertColumnNameToPropertyName(dedFk.getIdColumnName()); final String fkColumn = uncapitalize(tableName) + capitalize(columnName); final Object idValue = BeanUtil.pojo.getProperty(value, dedFk.getIdPropertyName()); return sql().$(SELECT).column(tableRef).$(FROM).table(entity, tableRef).$(WHERE).ref(tableRef, fkColumn).$(EQUALS).columnValue(idValue); }
/** * Creates SELECT criteria for the entity matched by foreign key. * Foreign key is created by concatenating foreign table name and column name. */ public static DbSqlBuilder findForeign(Class entity, Object value) { String tableRef = createTableRefName(entity); DbOomManager dbOomManager = DbOomManager.getInstance(); DbEntityDescriptor dedFk = dbOomManager.lookupType(value.getClass()); String tableName = dbOomManager.getTableNames().convertTableNameToEntityName(dedFk.getTableName()); String columnName = dbOomManager.getColumnNames().convertColumnNameToPropertyName(dedFk.getIdColumnName()); String fkColumn = uncapitalize(tableName) + capitalize(columnName); Object idValue = BeanUtil.getProperty(value, dedFk.getIdPropertyName()); return sql()._(SELECT).column(tableRef)._(FROM).table(entity, tableRef)._(WHERE).ref(tableRef, fkColumn)._(EQUALS).columnValue(idValue); }