/*
* ToroDB
* Copyright © 2014 8Kdata Technology (www.8kdata.com)
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package com.torodb.backend.derby;
import com.torodb.backend.AbstractMetaDataWriteInterface;
import com.torodb.backend.SqlBuilder;
import com.torodb.backend.SqlHelper;
import com.torodb.backend.converters.TableRefConverter;
import com.torodb.backend.tables.KvTable;
import com.torodb.backend.tables.MetaCollectionTable;
import com.torodb.backend.tables.MetaDatabaseTable;
import com.torodb.backend.tables.MetaDocPartIndexColumnTable;
import com.torodb.backend.tables.MetaDocPartIndexTable;
import com.torodb.backend.tables.MetaDocPartTable;
import com.torodb.backend.tables.MetaFieldTable;
import com.torodb.backend.tables.MetaIndexFieldTable;
import com.torodb.backend.tables.MetaIndexTable;
import com.torodb.backend.tables.MetaScalarTable;
import com.torodb.core.TableRef;
import org.jooq.Condition;
import org.jooq.TableField;
import javax.inject.Inject;
import javax.inject.Singleton;
/**
*
*/
@Singleton
public class DerbyMetaDataWriteInterface extends AbstractMetaDataWriteInterface {
@Inject
public DerbyMetaDataWriteInterface(DerbyMetaDataReadInterface metaDataReadInterface,
SqlHelper sqlHelper) {
super(metaDataReadInterface, sqlHelper);
}
@Override
protected String getCreateMetaDatabaseTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaDatabaseTable.TableFields.NAME).append(
" varchar(32672) PRIMARY KEY ,")
.quote(MetaDatabaseTable.TableFields.IDENTIFIER).append(
" varchar(128) NOT NULL UNIQUE ")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaCollectionTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaCollectionTable.TableFields.DATABASE).append(
" varchar(32672) NOT NULL ,")
.quote(MetaCollectionTable.TableFields.NAME).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDatabaseTable.TableFields.IDENTIFIER).append(
" varchar(128) NOT NULL UNIQUE ,")
.append(" PRIMARY KEY (").quote(MetaCollectionTable.TableFields.DATABASE).append(",")
.quote(MetaCollectionTable.TableFields.NAME).append(")")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaDocPartTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaDocPartTable.TableFields.DATABASE).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartTable.TableFields.COLLECTION).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartTable.TableFields.TABLE_REF).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartTable.TableFields.IDENTIFIER).append(
" varchar(128) NOT NULL ,")
.quote(MetaDocPartTable.TableFields.LAST_RID).append(
" integer NOT NULL ,")
.append(" PRIMARY KEY (").quote(MetaDocPartTable.TableFields.DATABASE).append(",")
.quote(MetaDocPartTable.TableFields.COLLECTION).append(",")
.quote(MetaDocPartTable.TableFields.TABLE_REF).append("),")
.append(" UNIQUE (").quote(MetaDocPartTable.TableFields.DATABASE).append(",")
.quote(MetaDocPartTable.TableFields.IDENTIFIER).append(")")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaFieldTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaFieldTable.TableFields.DATABASE).append(" varchar(32672) NOT NULL ,")
.quote(MetaFieldTable.TableFields.COLLECTION).append(" varchar(32672) NOT NULL ,")
.quote(MetaFieldTable.TableFields.TABLE_REF).append(" varchar(32672) NOT NULL ,")
.quote(MetaFieldTable.TableFields.NAME).append(" varchar(32672) NOT NULL ,")
.quote(MetaFieldTable.TableFields.TYPE).append(" varchar(128) NOT NULL ,")
.quote(MetaFieldTable.TableFields.IDENTIFIER).append(" varchar(128) NOT NULL ,")
.append(" PRIMARY KEY (").quote(MetaFieldTable.TableFields.DATABASE).append(",")
.quote(MetaFieldTable.TableFields.COLLECTION).append(",")
.quote(MetaFieldTable.TableFields.TABLE_REF).append(",")
.quote(MetaFieldTable.TableFields.NAME).append(",")
.quote(MetaFieldTable.TableFields.TYPE).append("),")
.append(" UNIQUE (").quote(MetaFieldTable.TableFields.DATABASE).append(",")
.quote(MetaFieldTable.TableFields.COLLECTION).append(",")
.quote(MetaFieldTable.TableFields.TABLE_REF).append(",")
.quote(MetaFieldTable.TableFields.IDENTIFIER).append(")")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaScalarTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaScalarTable.TableFields.DATABASE).append(" varchar(32672) NOT NULL ,")
.quote(MetaScalarTable.TableFields.COLLECTION).append(" varchar(32672) NOT NULL ,")
.quote(MetaScalarTable.TableFields.TABLE_REF).append(" varchar(32672) NOT NULL ,")
.quote(MetaScalarTable.TableFields.TYPE).append(" varchar(128) NOT NULL ,")
.quote(MetaScalarTable.TableFields.IDENTIFIER).append(" varchar(128) NOT NULL ,")
.append(" PRIMARY KEY (").quote(MetaScalarTable.TableFields.DATABASE).append(",")
.quote(MetaScalarTable.TableFields.COLLECTION).append(",")
.quote(MetaScalarTable.TableFields.TABLE_REF).append(",")
.quote(MetaScalarTable.TableFields.TYPE).append("),")
.append(" UNIQUE (").quote(MetaScalarTable.TableFields.DATABASE).append(",")
.quote(MetaScalarTable.TableFields.COLLECTION).append(",")
.quote(MetaScalarTable.TableFields.TABLE_REF).append(",")
.quote(MetaScalarTable.TableFields.IDENTIFIER).append(")")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaIndexTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaIndexTable.TableFields.DATABASE).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexTable.TableFields.COLLECTION).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexTable.TableFields.NAME).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexTable.TableFields.UNIQUE).append(" boolean NOT NULL ,")
.append(" PRIMARY KEY (").quote(MetaIndexTable.TableFields.DATABASE).append(",")
.quote(MetaIndexTable.TableFields.COLLECTION).append(",")
.quote(MetaIndexTable.TableFields.NAME).append(")")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaIndexFieldTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaIndexFieldTable.TableFields.DATABASE).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexFieldTable.TableFields.COLLECTION).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexFieldTable.TableFields.INDEX).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexFieldTable.TableFields.POSITION).append(" integer NOT NULL ,")
.quote(MetaIndexFieldTable.TableFields.TABLE_REF).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexFieldTable.TableFields.NAME).append(" varchar(32672) NOT NULL ,")
.quote(MetaIndexFieldTable.TableFields.ORDERING).append(" varchar(32672) NOT NULL ,")
.append(" PRIMARY KEY (").quote(MetaIndexFieldTable.TableFields.DATABASE).append(",")
.quote(MetaIndexFieldTable.TableFields.COLLECTION).append(",")
.quote(MetaIndexFieldTable.TableFields.INDEX).append(",")
.quote(MetaIndexFieldTable.TableFields.POSITION).append("),")
.append(" UNIQUE (").quote(MetaIndexFieldTable.TableFields.DATABASE).append(",")
.quote(MetaIndexFieldTable.TableFields.COLLECTION).append(",")
.quote(MetaIndexFieldTable.TableFields.INDEX).append(",")
.quote(MetaIndexFieldTable.TableFields.TABLE_REF).append(",")
.quote(MetaIndexFieldTable.TableFields.NAME).append(")")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaDocPartIndexTableStatement(String schemaName, String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaDocPartIndexTable.TableFields.DATABASE).append(" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexTable.TableFields.IDENTIFIER).append(" varchar(128) NOT NULL ,")
.quote(MetaDocPartIndexTable.TableFields.COLLECTION).append(" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexTable.TableFields.TABLE_REF).append(" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexTable.TableFields.UNIQUE).append(" boolean NOT NULL ,")
.append(" PRIMARY KEY (").quote(MetaDocPartIndexTable.TableFields.DATABASE).append(",")
.quote(MetaDocPartIndexTable.TableFields.IDENTIFIER).append(")")
.append(")")
.toString();
return statement;
}
@Override
protected String getCreateMetaDocPartIndexColumnTableStatement(String schemaName,
String tableName) {
String statement = new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(MetaDocPartIndexColumnTable.TableFields.DATABASE).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexColumnTable.TableFields.INDEX_IDENTIFIER).append(
" varchar(128) NOT NULL ,")
.quote(MetaDocPartIndexColumnTable.TableFields.POSITION).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexColumnTable.TableFields.COLLECTION).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexColumnTable.TableFields.TABLE_REF).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexColumnTable.TableFields.IDENTIFIER).append(
" varchar(32672) NOT NULL ,")
.quote(MetaDocPartIndexColumnTable.TableFields.ORDERING).append(
" varchar(128) NOT NULL ,")
.append(" PRIMARY KEY (").quote(MetaDocPartIndexColumnTable.TableFields.DATABASE).append(
",")
.quote(MetaDocPartIndexColumnTable.TableFields.INDEX_IDENTIFIER).append(",")
.quote(MetaDocPartIndexColumnTable.TableFields.POSITION).append("),")
.append(" UNIQUE (").quote(MetaDocPartIndexColumnTable.TableFields.DATABASE).append(",")
.quote(MetaDocPartIndexColumnTable.TableFields.INDEX_IDENTIFIER).append(",")
.quote(MetaDocPartIndexColumnTable.TableFields.IDENTIFIER).append(")")
.append(")")
.toString();
return statement;
}
@SuppressWarnings("unchecked")
@Override
protected Condition getTableRefEqCondition(@SuppressWarnings("rawtypes") TableField field,
TableRef tableRef) {
return field.eq(TableRefConverter.toJsonArray(tableRef));
}
@Override
protected String getCreateMetainfStatement(String schemaName, String tableName) {
return new SqlBuilder("CREATE TABLE ").table(schemaName, tableName)
.append(" (")
.quote(KvTable.TableFields.KEY).append(" varchar(256) NOT NULL, ")
.quote(KvTable.TableFields.VALUE).append(" varchar(32672) NOT NULL,")
.append(" PRIMARY KEY (").quote(KvTable.TableFields.KEY).append(')')
.append(')')
.toString();
}
}