/** * 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); } }
} else { resolveColumnDbSqlType(connection, dec); setObject(paramName, param.getValue(), dec.getSqlTypeClass(), dec.getDbSqlType());
@Override public void process(final StringBuilder out) { DbEntityDescriptor ded = entityName != null ? lookupName(entityName) : lookupType(entityType); StringBuilder col = new StringBuilder(); StringBuilder val = new StringBuilder(); DbEntityColumnDescriptor[] decList = ded.getColumnDescriptors(); String typeName = StringUtil.uncapitalize(ded.getEntityName()); int size = 0; for (DbEntityColumnDescriptor dec : decList) { if (dec.isId() && !defaultIsUpdateablePrimaryKey) { continue; } String property = dec.getPropertyName(); Object value = BeanUtil.declared.getProperty(data, property); if (value == null) { continue; } if (size > 0) { col.append(',').append(' '); val.append(',').append(' '); } size++; col.append(dec.getColumnNameForQuery()); final String propertyName = typeName + '.' + property; defineParameter(val, propertyName, value, dec); } out.append("insert into ").append(ded.getTableNameForQuery()).append(" (") .append(col).append(") values (").append(val).append(')'); }
/** * Returns <code>true</code> if a value is considered empty i.e. not existing. */ protected boolean isEmptyColumnValue(final DbEntityColumnDescriptor dec, final Object value) { if (value == null) { return true; } // special case for ID column if (dec.isId() && value instanceof Number) { if (((Number) value).intValue() == 0) { return true; } } // special case for primitives if (dec.getPropertyType().isPrimitive()) { int n = ((Number) value).intValue(); if (n == 0) { return true; } } // special case for strings if (value instanceof CharSequence) { if (StringUtil.isBlank((CharSequence) value)) { return true; } } return false; }
/** * 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); } }
String propertyName = (dec == null ? null : dec.getPropertyName()); if (type != null) { dec.updateDbSqlType(columnDbSqlType); // updates column db sql type information for the entity!!! Class<? extends SqlType> sqlTypeClass = dec.getSqlTypeClass(); Object value = readColumnValue(colNdx, type, sqlTypeClass, columnDbSqlType);
out.append('('); for (DbEntityColumnDescriptor dec : decList) { if ((includeColumns == COLS_ONLY_IDS) && (dec.isId() == false)) { continue; String property = dec.getPropertyName(); Object value = BeanUtil.getDeclaredProperty(data, property); if ((includeColumns == COLS_ONLY_EXISTING) && (value == null)) { out.append(table).append('.').append(dec.getColumnName()).append('='); String propertyName = typeName + '.' + property; defineParameter(out, propertyName, value, dec);
/** * Populates entity with generated column values from executed query. */ public void populateGeneratedKeys(final Object entity) { final String[] generatedColumns = getGeneratedColumnNames(); if (generatedColumns == null) { return; } DbEntityDescriptor ded = dbOom.entityManager().lookupType(entity.getClass()); // prepare key types Class[] keyTypes = new Class[generatedColumns.length]; String[] properties = new String[generatedColumns.length]; for (int i = 0; i < generatedColumns.length; i++) { String column = generatedColumns[i]; DbEntityColumnDescriptor decd = ded.findByColumnName(column); if (decd != null) { keyTypes[i] = decd.getPropertyType(); properties[i] = decd.getPropertyName(); } } final Object keyValues = findGeneratedColumns(keyTypes); if (!keyValues.getClass().isArray()) { BeanUtil.declared.setProperty(entity, properties[0], keyValues); } else { for (int i = 0; i < properties.length; i++) { BeanUtil.declared.setProperty(entity, properties[i], ((Object[]) keyValues)[i]); } } }
boolean withIds = (columnRefArr != null) && ArraysUtil.contains(columnRefArr, StringPool.PLUS); for (DbEntityColumnDescriptor dec : decList) { if ((includeColumns == COLS_ONLY_IDS) && (!dec.isId())) { continue; if ((includeColumns == COLS_ALL_BUT_ID) && (dec.isId())) { continue; && (!withIds || (!dec.isId())) && (!ArraysUtil.contains(columnRefArr, dec.getPropertyName()))) { continue;
@Override public void process(StringBuilder out) { DbEntityDescriptor ded = entityName != null ? lookupName(entityName) : lookupType(entityType); StringBuilder col = new StringBuilder(); StringBuilder val = new StringBuilder(); DbEntityColumnDescriptor[] decList = ded.getColumnDescriptors(); String typeName = StringUtil.uncapitalize(ded.getEntityName()); int size = 0; for (DbEntityColumnDescriptor dec : decList) { String property = dec.getPropertyName(); Object value = BeanUtil.getDeclaredProperty(data, property); if (value == null) { continue; } if (size > 0) { col.append(',').append(' '); val.append(',').append(' '); } size++; col.append(dec.getColumnName()); String propertyName = typeName + '.' + property; defineParameter(val, propertyName, value, dec); } out.append("insert into ").append(ded.getTableName()).append(" (") .append(col).append(") values (").append(val).append(')'); }
int count = 0; for (DbEntityColumnDescriptor dec : decList) { if ((includeColumns == COLS_ONLY_IDS) && (dec.isId() == false)) { continue; appendColumnName(out, ded, dec.getColumnName()); } else { appendAlias(out, ded, dec.getColumnName()); DbEntityColumnDescriptor dec = ded.findByPropertyName(columnRef); templateData.lastColumnDec = dec; String columnName = dec == null ? null : dec.getColumnName();
/** * Returns the identity column name of column marked as identity. * Throws an exception if table has composite primary key. */ public String getIdColumnName() { ensureSingleIdColumn(); return idColumnDescriptors[0].getColumnName(); }
/** * Returns the first property name of column marked as identity. * Throws an exception if table has composite primary key. */ public String getIdPropertyName() { ensureSingleIdColumn(); return idColumnDescriptors[0].getPropertyName(); }
return new DbEntityColumnDescriptor( dbEntityDescriptor, quoteIfRequired(columnName, columnNamingStrategy.isAlwaysQuoteNames(), columnNamingStrategy.getQuoteChar()),
@Override public void process(final StringBuilder out) { final DbEntityDescriptor ded; if (tableRef != null) { ded = lookupTableRef(tableRef); final String tableName = resolveTable(tableRef, ded); out.append(tableName); } else { ded = findColumnRef(columnRef); } if (onlyId) { if (tableRef != null) { out.append('.'); } out.append(ded.getIdColumnName()); } else if (columnRef != null) { DbEntityColumnDescriptor dec = ded.findByPropertyName(columnRef); templateData.lastColumnDec = dec; if (dec == null) { throw new DbSqlBuilderException("Invalid column reference: [" + tableRef + '.' + columnRef + "]"); } if (tableRef != null) { out.append('.'); } out.append(dec.getColumnNameForQuery()); } }
DbEntityDescriptor ded = dbOomManager.lookupType(currentType); DbEntityColumnDescriptor dec = ded.findByColumnName(columnName); String propertyName = (dec == null ? null : dec.getPropertyName()); if (propertyName != null) { if (result[currentResult] == null) { if (type != null) { dec.updateDbSqlType(columnDbSqlType); // updates column db sql type information for the entity!!! Class<? extends SqlType> sqlTypeClass = dec.getSqlTypeClass(); Object value = readColumnValue(colNdx, type, sqlTypeClass, columnDbSqlType); if (value != null) {
/** * Populates entity with generated column values from executed query. */ public void populateGeneratedKeys(final Object entity) { final String[] generatedColumns = getGeneratedColumnNames(); if (generatedColumns == null) { return; } DbEntityDescriptor ded = dbOom.entityManager().lookupType(entity.getClass()); // prepare key types Class[] keyTypes = new Class[generatedColumns.length]; String[] properties = new String[generatedColumns.length]; for (int i = 0; i < generatedColumns.length; i++) { String column = generatedColumns[i]; DbEntityColumnDescriptor decd = ded.findByColumnName(column); if (decd != null) { keyTypes[i] = decd.getPropertyType(); properties[i] = decd.getPropertyName(); } } final Object keyValues = findGeneratedColumns(keyTypes); if (!keyValues.getClass().isArray()) { BeanUtil.declared.setProperty(entity, properties[0], keyValues); } else { for (int i = 0; i < properties.length; i++) { BeanUtil.declared.setProperty(entity, properties[i], ((Object[]) keyValues)[i]); } } }
/** * 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; } } } }
/** * Returns <code>true</code> if a value is considered empty i.e. not existing. */ protected boolean isEmptyColumnValue(final DbEntityColumnDescriptor dec, final Object value) { if (value == null) { return true; } // special case for ID column if (dec.isId() && value instanceof Number) { if (((Number) value).intValue() == 0) { return true; } } // special case for primitives if (dec.getPropertyType().isPrimitive()) { int n = ((Number) value).intValue(); if (n == 0) { return true; } } // special case for strings if (value instanceof CharSequence) { if (StringUtil.isBlank((CharSequence) value)) { return true; } } return false; }
boolean withIds = (columnRefArr != null) && ArraysUtil.contains(columnRefArr, StringPool.PLUS); for (DbEntityColumnDescriptor dec : decList) { if ((includeColumns == COLS_ONLY_IDS) && (!dec.isId())) { continue; if ((includeColumns == COLS_ALL_BUT_ID) && (dec.isId())) { continue; && (!withIds || (!dec.isId())) && (!ArraysUtil.contains(columnRefArr, dec.getPropertyName()))) { continue;