@Override public final Result<O> fetchParents(Collection<? extends R> records) { if (records == null || records.size() == 0) { return new ResultImpl<O>(new DefaultConfiguration(), key.getFields()); } else { return fetch(records, key.getTable(), key.getFieldsArray(), getFieldsArray()); } }
@Override public final Result<O> fetchParents(Collection<? extends R> records) { if (records == null || records.size() == 0) { return new ResultImpl<O>(new DefaultConfiguration(), key.getFields()); } else { return fetch(records, key.getTable(), key.getFieldsArray(), getFieldsArray()); } }
@Override public R operate(R copy) throws RuntimeException { // Copy all fields. This marks them all as isChanged, which is important List<TableField<R, ?>> key = getPrimaryKey().getFields(); for (Field<?> field : fields.fields.fields) { // Don't copy key values if (!key.contains(field)) { setValue(copy, field); } } return copy; }
@SuppressWarnings("unchecked") public static <P extends VertxPojo, R extends UpdatableRecord<R>,T,F> F insertReturningPrimaryAsync(P object, DAO<R,P,T> dao,BiFunction<Query,Function<Long,T>,F> function){ Arguments.require(INSERT_RETURNING_SUPPORT.contains(dao.configuration().dialect()), "Only MySQL supported"); UniqueKey<?> key = dao.getTable().getPrimaryKey(); TableField<? extends Record, ?> tableField = key.getFieldsArray()[0]; Function<Long,T> keyConverter = lastId -> { T checkedResult; if(tableField.getType().equals(Integer.class)){ checkedResult = (T) Integer.valueOf(lastId.intValue()); }else{ checkedResult = (T) lastId; } return checkedResult; }; DSLContext dslContext = DSL.using(dao.configuration()); return function.apply(dslContext.insertInto(dao.getTable()).set(dslContext.newRecord(dao.getTable(), object)).returning(key.getFields()), keyConverter); } }
private <T> T skipPrimaryKey(final T entity) { final Table<?> tableField = Ut.field(this.vertxDAO, "table"); final UniqueKey key = tableField.getPrimaryKey(); key.getFields().stream().map(item -> ((TableField) item).getName()) .filter(this.revert::containsKey) .map(this.revert::get) .forEach(item -> Ut.field(entity, item.toString(), null)); return entity; }
private <T> T skipPrimaryKey(final T entity) { final Table<?> tableField = Ut.field(this.vertxDAO, "table"); final UniqueKey key = tableField.getPrimaryKey(); key.getFields().stream().map(item -> ((TableField) item).getName()) .filter(this.revert::containsKey) .map(this.revert::get) .forEach(item -> Ut.field(entity, item.toString(), null)); return entity; }
@Override public R operate(R copy) throws RuntimeException { // Copy all fields. This marks them all as isChanged, which is important List<TableField<R, ?>> key = getPrimaryKey().getFields(); for (Field<?> field : fields.fields.fields) { // Don't copy key values if (!key.contains(field)) { setValue(copy, field); } } return copy; }
private final List<List<? extends Field<?>>> conflictingKeys(Configuration configuration) { // [#7365] PostgreSQL ON CONFLICT (conflict columns) clause if (onConflict != null && onConflict.size() > 0) return Collections.<List<? extends Field<?>>>singletonList(onConflict); // [#7409] PostgreSQL ON CONFLICT ON CONSTRAINT clause else if (onConstraintUniqueKey != null) return Collections.<List<? extends Field<?>>>singletonList(onConstraintUniqueKey.getFields()); // [#6462] MySQL ON DUPLICATE KEY UPDATE clause // Flag for backwards compatibility considers only PRIMARY KEY else if (TRUE.equals(Tools.settings(configuration).isEmulateOnDuplicateKeyUpdateOnPrimaryKeyOnly())) return Collections.<List<? extends Field<?>>>singletonList(table.getPrimaryKey().getFields()); // [#6462] MySQL ON DUPLICATE KEY UPDATE clause // All conflicting keys are considered List<UniqueKey<R>> keys = table.getKeys(); List<List<? extends Field<?>>> result = new ArrayList<List<? extends Field<?>>>(keys.size()); for (UniqueKey<R> key : keys) result.add(key.getFields()); return result; }
@Override public final LoaderImpl<R> fields(Field<?>... f) { this.fields = f; this.primaryKey = new boolean[f.length]; if (table.getPrimaryKey() != null) { for (int i = 0; i < fields.length; i++) { if (fields[i] != null) { if (table.getPrimaryKey().getFields().contains(fields[i])) { primaryKey[i] = true; } } } } return this; }
@Override public final LoaderImpl<R> fields(Field<?>... f) { this.fields = f; this.primaryKey = new boolean[f.length]; if (table.getPrimaryKey() != null) { for (int i = 0; i < fields.length; i++) { if (fields[i] != null) { if (table.getPrimaryKey().getFields().contains(fields[i])) { primaryKey[i] = true; } } } } return this; }
private final Collection<Field<?>> getReturning() { Collection<Field<?>> result = new LinkedHashSet<Field<?>>(); Identity<R, ?> identity = getTable().getIdentity(); if (identity != null) { result.add(identity.getField()); } result.addAll(getPrimaryKey().getFields()); return result; }
final Collection<Field<?>> getReturning() { Collection<Field<?>> result = new LinkedHashSet<Field<?>>(); Identity<R, ?> identity = getTable().getIdentity(); if (identity != null) result.add(identity.getField()); UniqueKey<?> key = getPrimaryKey(); if (key != null) result.addAll(key.getFields()); return result; } }
@Override @SuppressWarnings({ "rawtypes", "unchecked" }) public Record key() { RecordImpl result = new RecordImpl(getPrimaryKey().getFields()); result.setValues(result.fields.fields.fields, this); return result; }
@Override @SuppressWarnings({ "rawtypes", "unchecked" }) public Record key() { RecordImpl result = new RecordImpl(getPrimaryKey().getFields()); result.setValues(result.fields.fields.fields, this); return result; }
public INSERT_RETURNING insertReturningPrimary(P object){ UniqueKey<?> key = getTable().getPrimaryKey(); //usually key shouldn't be null because DAO generation is omitted in such cases Objects.requireNonNull(key,()->"No primary key"); return queryExecutor().insertReturning( dslContext -> dslContext.insertInto(getTable()).set(newRecord(dslContext, object)).returning(key.getFields()), keyConverter()); }
public INSERT_RETURNING insertReturningPrimary(P object){ UniqueKey<?> key = getTable().getPrimaryKey(); //usually key shouldn't be null because DAO generation is omitted in such cases Objects.requireNonNull(key,()->"No primary key"); return queryExecutor().insertReturning( dslContext -> dslContext.insertInto(getTable()).set(newRecord(dslContext, object)).returning(key.getFields()), keyConverter()); }
@SuppressWarnings("unchecked") public static <P extends VertxPojo, R extends UpdatableRecord<R>,T,F> F updateExecAsync(P object, DAO<R,P,T> dao, Function<Query,F> function){ DSLContext dslContext = DSL.using(dao.configuration()); UniqueKey<R> pk = dao.getTable().getPrimaryKey(); R record = dslContext.newRecord(dao.getTable(), object); Condition where = DSL.trueCondition(); for (TableField<R,?> tableField : pk.getFields()) { //exclude primary keys from update record.changed(tableField,false); where = where.and(((TableField<R,Object>)tableField).eq(record.get(tableField))); } Map<String, Object> valuesToUpdate = Arrays.stream(record.fields()) .collect(HashMap::new, (m, f) -> m.put(f.getName(), f.getValue(record)), HashMap::putAll); return function.apply(dslContext.update(dao.getTable()).set(valuesToUpdate).where(where)); }
@SuppressWarnings("unchecked") @Override public EXECUTE update(P object){ Objects.requireNonNull(object); return queryExecutor().execute(dslContext -> { R record = dslContext.newRecord(getTable(), object); Condition where = DSL.trueCondition(); UniqueKey<R> pk = getTable().getPrimaryKey(); for (TableField<R,?> tableField : pk.getFields()) { //exclude primary keys from update record.changed(tableField,false); where = where.and(((TableField<R,Object>)tableField).eq(record.get(tableField))); } Map<String, Object> valuesToUpdate = Arrays.stream(record.fields()) .collect(HashMap::new, (m, f) -> m.put(f.getName(), f.getValue(record)), HashMap::putAll); return dslContext .update(getTable()) .set(valuesToUpdate) .where(where); }); }
@Override protected void loadUniqueKeys(DefaultRelations relations) throws SQLException { for (Schema schema : getSchemasFromMeta()) { SchemaDefinition s = getSchema(schema.getName()); if (s != null) { for (Table<?> table : schema.getTables()) { TableDefinition t = getTable(s, table.getName()); if (t != null) { UniqueKey<?> key = table.getPrimaryKey(); if (key != null) { for (Field<?> field : key.getFields()) { ColumnDefinition c = t.getColumn(field.getName()); relations.addPrimaryKey("PK_" + key.getTable().getName(), c); } } } } } } }