public static JdbcTimestampBoundStore create(final JdbcKeyValueService kvs) { final JdbcTimestampBoundStore store = new JdbcTimestampBoundStore(kvs); kvs.run((Function<DSLContext, Void>) ctx -> { String partialSql = ctx.createTable(store.TABLE) .column(DUMMY_COLUMN, INTEGER.nullable(false)) .column(LATEST_TIMESTAMP, BIGINT.nullable(false)) .getSQL(); int endIndex = partialSql.lastIndexOf(')'); String fullSql = partialSql.substring(0, endIndex) + "," + " CONSTRAINT " + kvs.primaryKey(TIMESTAMP_TABLE) + " PRIMARY KEY (" + DUMMY_COLUMN.getName() + ")" + partialSql.substring(endIndex); try { ctx.execute(fullSql); } catch (DataAccessException e) { kvs.handleTableCreationException(e); } ctx.insertInto(store.TABLE, DUMMY_COLUMN, LATEST_TIMESTAMP) .select(ctx.select(DUMMY_COLUMN, LATEST_TIMESTAMP) .from(kvs.values(ctx, new RowN[] {(RowN) DSL.row(0, 10000L)}, "t", DUMMY_COLUMN.getName(), LATEST_TIMESTAMP.getName())) .whereNotExists(ctx.selectOne() .from(store.TABLE) .where(DUMMY_COLUMN.eq(0)))) .execute(); return null; }); return store; }
@Override protected TableField<MySqlMetaScalarRecord, String> createIdentifierField() { return createField(TableFields.IDENTIFIER.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); } }
@Override protected TableField<MySQLCollectionsRecord, String> createStorageEngineField() { return createField(TableFields.STORAGE_ENGINE.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); } }
@Override protected TableField<MySqlMetaDocPartIndexRecord, String> createDatabaseField() { return createField(TableFields.DATABASE.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); }
@Override protected TableField<MySqlMetaDocPartIndexRecord, Boolean> createUniqueField() { return createField(TableFields.UNIQUE.fieldName, SQLDataType.BOOLEAN.nullable(false), this, ""); }
@Override @SuppressWarnings("checkstyle:LineLength") protected TableField<MySqlMetaDocPartIndexColumnRecord, String> createIndexIdentifierField() { return createField(TableFields.INDEX_IDENTIFIER.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); }
@Override protected TableField<MySqlMetaIndexRecord, String> createDatabaseField() { return createField(TableFields.DATABASE.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); }
@Override protected TableField<MySqlMetaFieldRecord, FieldType> createTypeField() { return createField(TableFields.TYPE.fieldName, FieldTypeConverter.TYPE.nullable(false), this, ""); }
@Override protected TableField<MySqlMetaFieldRecord, String> createIdentifierField() { return createField(TableFields.IDENTIFIER.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); } }
@Override protected TableField<MySqlMetaIndexFieldRecord, String> createTableRefField() { return createField(TableFields.TABLE_REF.fieldName, SQLDataType.VARCHAR .nullable(false), this, ""); }
@Override protected TableField<PostgreSQLCollectionsRecord, String> createStorageEngineField() { return createField(TableFields.STORAGE_ENGINE.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); } }
@Override protected TableField<MySqlMetaDocPartIndexRecord, String> createCollectionField() { return createField(TableFields.COLLECTION.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); }
@Override protected TableField<MySqlMetaDocPartIndexRecord, String> createTableRefField() { return createField(TableFields.TABLE_REF.fieldName, SQLDataType.VARCHAR .nullable(false), this, ""); }
@Override protected TableField<MySqlMetaDocPartIndexColumnRecord, String> createDatabaseField() { return createField(TableFields.DATABASE.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); }
@Override protected TableField<MySqlMetaDocPartIndexColumnRecord, String> createTableRefField() { return createField(TableFields.TABLE_REF.fieldName, SQLDataType.VARCHAR .nullable(false), this, ""); }
@Override protected TableField<MySqlMetaDatabaseRecord, String> createIdentifierField() { return createField(TableFields.IDENTIFIER.fieldName, SQLDataType.VARCHAR.nullable(false), this, ""); } }
/** * [#2700] [#3582] If a POJO attribute is NULL, but the column is NOT NULL * then we should let the database apply DEFAULT values */ static final void resetChangedOnNotNull(Record record) { int size = record.size(); for (int i = 0; i < size; i++) if (record.get(i) == null) if (!record.field(i).getDataType().nullable()) record.changed(i, false); }
/** * [#2700] [#3582] If a POJO attribute is NULL, but the column is NOT NULL * then we should let the database apply DEFAULT values */ private static final void resetChangedOnNotNull(Record record) { int size = record.size(); for (int i = 0; i < size; i++) if (record.get(i) == null) if (!record.field(i).getDataType().nullable()) record.changed(i, false); } }