public ClassToolImpl(final ClassDescriptor<BEAN> descriptor, final Persistor<BEAN> ormPersistor) { this.descriptor = descriptor; this.persistor = ormPersistor; for (final String javaFieldName : descriptor.getAllColumnJavaNames()) { fieldClassMapByJavaName.put(javaFieldName, ExtendedFieldDescriptor.get(descriptor, descriptor.getFieldDescriptorByJavaName(javaFieldName))); } }
/** * @param newBean * @param serviceCatalog * @param ormSession */ public UpdateQueryImpl(final List<BEAN> beans, final Class<BEAN> clazz, final ClassTool<BEAN> ormClassTool, final SqlCache sqlCache, final SqlExecutor sqlExecutor, final DBProfile dbType) { this.beans = beans; this.clazz = clazz; this.ormClassTool = ormClassTool; this.sqlCache = sqlCache; this.sqlExecutor = sqlExecutor; this.dbType = dbType; pkAndVersionFieldNames = ormClassTool.getDescriptor().getPrimaryKeyAndVersionColumnJavaNames(); notPksFieldNames = ormClassTool.getDescriptor().getNotPrimaryKeyColumnJavaNames(); }
@Override public String[] generatedColumnNames() { return ormClassTool.getDescriptor().getAllGeneratedColumnDBNames(); } };
@SuppressWarnings("unchecked") @Override public final <BEAN> FindQueryBase<BEAN> find(final BEAN bean) throws JpoException { ClassTool<BEAN> ormClassTool = (ClassTool<BEAN>) classToolMap.get(bean.getClass()); String[] pks = ormClassTool.getDescriptor().getPrimaryKeyColumnJavaNames(); Object[] values = ormClassTool.getPersistor().getPropertyValues(pks, bean); return find((Class<BEAN>) bean.getClass(), values); }
private BEAN save(final BEAN bean) { final Persistor<BEAN> persistor = ormClassTool.getPersistor(); // CHECK IF OBJECT HAS A 'VERSION' FIELD and increase it final BEAN updatedBean = persistor.increaseVersion(bean, true); final boolean useGenerator = ormClassTool.getPersistor().useGenerators(updatedBean); final String sql = getCacheableQuery(useGenerator); if (!useGenerator) { final String[] keys = ormClassTool.getDescriptor().getAllColumnJavaNames(); sqlExecutor.update(sql, statement -> persistor.setBeanValuesToStatement(keys, updatedBean, statement, 0)); return updatedBean; } else { final GeneratedKeyReader<BEAN> generatedKeyExtractor = GeneratedKeyReader.get(ormClassTool.getDescriptor().getAllGeneratedColumnDBNames(), (final ResultSet generatedKeyResultSet, Integer affectedRows) -> { BEAN result = updatedBean; if (generatedKeyResultSet.hasNext()) { result = persistor.updateGeneratedValues(generatedKeyResultSet.next(), result); } return result; }); final String[] keys = ormClassTool.getDescriptor().getAllNotGeneratedColumnJavaNames(); return sqlExecutor.update(sql, statement -> persistor.setBeanValuesToStatement(keys, updatedBean, statement, 0), generatedKeyExtractor); } }
private final Select<Class<?>> getSelect(Class<?> clazz) { final ClassDescriptor<?> descriptor = classToolMap.get(clazz).getDescriptor(); final String[] fields = descriptor.getAllColumnJavaNames(); final Select<Class<?>> select = sqlFactory.select(()->fields).from(clazz); final SelectWhere where = select.where(); final String[] pks = descriptor.getPrimaryKeyColumnJavaNames(); for (final String pk : pks) { where.eq(pk, ""); } select.limit(1); return select; }
public CustomFindQueryBase(final Class<BEAN> clazz, final String alias, final ClassTool<BEAN> ormClassTool, final SqlFactory sqlFactory) { this.clazz = clazz; fields = ormClassTool.getDescriptor().getAllColumnJavaNames(); select = sqlFactory.select(this::fields).from(clazz, alias); }
private BEAN save(final BEAN bean) { final Persistor<BEAN> persistor = ormClassTool.getPersistor(); final SqlExecutor sqlExec = serviceCatalog.getSession().sqlExecutor(); //CHECK IF OBJECT HAS A 'VERSION' FIELD and increase it persistor.increaseVersion(bean, true); boolean useGenerator = ormClassTool.getPersistor().useGenerators(bean); String sql = getQuery(useGenerator); if (!useGenerator) { String[] keys = ormClassTool.getDescriptor().getAllColumnJavaNames(); Object[] values = persistor.getPropertyValues(keys, bean); sqlExec.update(sql, values); } else { final GeneratedKeyReader generatedKeyExtractor = new GeneratedKeyReader() { @Override public void read(final ResultSet generatedKeyResultSet) throws SQLException { if (generatedKeyResultSet.next()) { persistor.updateGeneratedValues(generatedKeyResultSet, bean); } } @Override public String[] generatedColumnNames() { return ormClassTool.getDescriptor().getAllGeneratedColumnDBNames(); } }; String[] keys = ormClassTool.getDescriptor().getAllNotGeneratedColumnJavaNames(); Object[] values = persistor.getPropertyValues(keys, bean); sqlExec.update(sql, generatedKeyExtractor, values); } return bean; }
@Override public final void renderSql(final StringBuilder queryBuilder) { queryBuilder.append("DELETE FROM "); //$NON-NLS-1$ queryBuilder.append(classDescriptor.getTableInfo().getTableNameWithSchema()); queryBuilder.append(" "); //$NON-NLS-1$ where.renderSqlElement(queryBuilder, nameSolver); }
private final <BEAN> FindQueryBase<BEAN> find(final Class<BEAN> clazz, final Object[] values) throws JpoException { ClassDescriptor<BEAN> descriptor = classToolMap.get(clazz).getDescriptor(); CacheInfo cacheInfo = descriptor.getCacheInfo(); FindQueryWhere<BEAN> query = findQuery(clazz).cache(cacheInfo.getCacheName()).where(); String[] pks = descriptor.getPrimaryKeyColumnJavaNames(); for (int i = 0; i < pks.length; i++) { query.eq(pks[i], values[i]); } return query.maxRows(1); }
private String getDbColumn(final String alias, final String field) { String dbColumn = registeredClass.get(alias).getFieldDescriptorByJavaName(field).getColumnInfo().getDBColumnName(); if (dbColumn.isEmpty()) { throw new JpoWrongPropertyNameException("Field with name [" + field + "] is not present or ignored for alias [" + alias + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } return dbColumn; }
private void updateGeneratedPropertiesIfNeeded() { if(useGenerators) { for (String generatedField : classDescriptor.getAllGeneratedColumnJavaNames() ) { generatedFields.add(generatedField); properties.remove(generatedField); } } }
@Override public int executeWithBatchUpdate() { final String query = sqlCache.delete(clazz); final String[] pks = ormClassTool.getDescriptor().getPrimaryKeyColumnJavaNames(); // WITH BATCH UPDATE VERSION: final Persistor<BEAN> persistor = ormClassTool.getPersistor(); final int[] result = sqlExecutor.batchUpdate(query, new BatchPreparedStatementSetter() { @Override public void set(Statement ps, int i) { persistor.setBeanValuesToStatement(pks, beans.get(i), ps, 0); } @Override public int getBatchSize() { return beans.size(); } }); return IntStream.of(result).sum(); }
@Override public String saveWithoutGenerators(Class<?> clazz) { return saveWithoutGenerators.computeIfAbsent(clazz, key -> { final ClassTool<?> classTool = classToolMap.get(clazz); final String[] fields = classTool.getDescriptor().getAllColumnJavaNames(); final Insert insert = sqlFactory.insertInto(clazz, fields); insert.values(new Object[fields.length]); return insert.sqlQuery(); }); }
@Override public final void renderSql(final StringBuilder queryBuilder) { queryBuilder.append("INSERT INTO "); //$NON-NLS-1$ queryBuilder.append(classDescriptor.getTableInfo().getTableNameWithSchema() ); queryBuilder.append(" "); //$NON-NLS-1$ elemValues.renderSqlElement(queryBuilder, nameSolver); }
private String getDbColumn(final String alias, final String field) { String dbColumn = registeredClass.get(alias).getFieldDescriptorByJavaName(field).getColumnInfo().getDBColumnName(); if (dbColumn.isEmpty()) { throw new JpoWrongPropertyNameException("Field with name [" + field + "] is not present or ignored for alias [" + alias + "]"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } return dbColumn; }
/** * @param newBean * @param serviceCatalog * @param ormSession */ public UpdateQueryImpl(final Stream<BEAN> beans, Class<BEAN> clazz, final ServiceCatalog serviceCatalog) { this.beans = beans; this.serviceCatalog = serviceCatalog; this.clazz = clazz; ormClassTool = serviceCatalog.getClassToolMap().get(clazz); persistor = ormClassTool.getPersistor(); pkAndVersionFieldNames = ormClassTool.getDescriptor().getPrimaryKeyAndVersionColumnJavaNames(); notPksFieldNames = ormClassTool.getDescriptor().getNotPrimaryKeyColumnJavaNames(); }
@Override public int executeWithBatchUpdate() { executed = true; String query = getQuery(); String[] pks = ormClassTool.getDescriptor().getPrimaryKeyColumnJavaNames(); final SqlExecutor sqlExec = serviceCatalog.getSession().sqlExecutor(); // WITH BATCH UPDATE VERSION: Stream<Object[]> valuesStream = beans.map(bean -> ormClassTool.getPersistor().getPropertyValues(pks, bean)); int[] result = sqlExec.batchUpdate(query, valuesStream); return IntStream.of(result).sum(); }
@Override public String saveWithGenerators(Class<?> clazz) { return saveWithGenerators.computeIfAbsent(clazz, key -> { final ClassTool<?> classTool = classToolMap.get(clazz); final String[] fields = classTool.getDescriptor().getAllColumnJavaNames(); final List<String> neededFields = new ArrayList<>(); final List<Generator> values = new ArrayList<>(); for (final String field : fields) { final ExtendedFieldDescriptor<?, Object> fieldDescriptor = classTool.getFieldDescriptorByJavaName(field); final Generator generator = fieldDescriptor.getGenerator(dbProfile).getGenerator(); if (generator.isRequiredColumnNameInInsertQuery()) { neededFields.add(field); values.add(generator); } } final Insert insert = sqlFactory.insertInto(clazz, neededFields.toArray(new String[0])); insert.values(values.toArray()); return insert.sqlQuery(); }); }
@Override public final void renderSqlElement(final StringBuilder queryBuilder, final NameSolver localNameSolver) { final String alias = localNameSolver.normalizedAlias(mainNameSolverClassId); queryBuilder.append("FROM "); //$NON-NLS-1$ queryBuilder.append(classDescriptor.getTableInfo().getTableNameWithSchema() ); queryBuilder.append( " " ); //$NON-NLS-1$ queryBuilder.append(alias); queryBuilder.append(" "); //$NON-NLS-1$ for (final FromElement joinElement : joinElements) { joinElement.renderSqlElement(queryBuilder, localNameSolver); } }