/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.xenei.jdbc4sparql.meta;
import java.sql.DatabaseMetaData;
import java.sql.ResultSetMetaData;
import java.sql.Types;
import org.xenei.jdbc4sparql.iface.Catalog;
import org.xenei.jdbc4sparql.iface.ColumnDef;
import org.xenei.jdbc4sparql.iface.DatasetProducer;
import org.xenei.jdbc4sparql.impl.NameUtils;
import org.xenei.jdbc4sparql.impl.rdf.RdfCatalog;
import org.xenei.jdbc4sparql.impl.rdf.RdfColumn;
import org.xenei.jdbc4sparql.impl.rdf.RdfColumnDef;
import org.xenei.jdbc4sparql.impl.rdf.RdfKey;
import org.xenei.jdbc4sparql.impl.rdf.RdfKeySegment;
import org.xenei.jdbc4sparql.impl.rdf.RdfSchema;
import org.xenei.jdbc4sparql.impl.rdf.RdfTable;
import org.xenei.jdbc4sparql.impl.rdf.RdfTableDef;
import org.xenei.jdbc4sparql.impl.rdf.ResourceBuilder;
import com.hp.hpl.jena.rdf.model.Model;
import com.hp.hpl.jena.rdf.model.Property;
import com.hp.hpl.jena.vocabulary.RDF;
import com.hp.hpl.jena.vocabulary.RDFS;
public class MetaCatalogBuilder {
public static Catalog getInstance(final DatasetProducer dsProducer) {
final Model model = dsProducer
.getMetaDataModel(MetaCatalogBuilder.LOCAL_NAME);
final RdfCatalog cat = new RdfCatalog.Builder()
.setName(MetaCatalogBuilder.LOCAL_NAME)
.setLocalModel(dsProducer.getMetaDatasetUnionModel())
.build(model);
final RdfSchema schema = new RdfSchema.Builder().setCatalog(cat)
.setName(MetaCatalogBuilder.SCHEMA_NAME).build(model);
// populate the catalog
new MetaCatalogBuilder(schema, model).build();
return cat;
}
public static RdfColumnDef.Builder getNonNullBooleanBuilder() {
return new RdfColumnDef.Builder().setType(Types.BOOLEAN).setNullable(
DatabaseMetaData.columnNoNulls);
}
public static RdfColumnDef.Builder getNonNullIntBuilder() {
return RdfColumnDef.Builder.getIntegerBuilder().setNullable(
DatabaseMetaData.columnNoNulls);
}
public static RdfColumnDef.Builder getNonNullShortBuilder() {
return RdfColumnDef.Builder.getSmallIntBuilder().setNullable(
DatabaseMetaData.columnNoNulls);
}
public static RdfColumnDef.Builder getNonNullStringBuilder() {
return RdfColumnDef.Builder.getStringBuilder().setNullable(
DatabaseMetaData.columnNoNulls);
}
public static RdfColumnDef.Builder getNullBooleanBuilder() {
return new RdfColumnDef.Builder().setType(Types.BOOLEAN).setNullable(
DatabaseMetaData.columnNullable);
}
public static RdfColumnDef.Builder getNullIntBuilder() {
return RdfColumnDef.Builder.getIntegerBuilder().setNullable(
DatabaseMetaData.columnNullable);
}
public static RdfColumnDef.Builder getNullShortBuilder() {
return RdfColumnDef.Builder.getSmallIntBuilder().setNullable(
DatabaseMetaData.columnNullable);
}
public static RdfColumnDef.Builder getNullStringBuilder() {
return RdfColumnDef.Builder.getStringBuilder().setNullable(
DatabaseMetaData.columnNullable);
}
public static final String NS = "http://org.xenei.jdbc4sparql/meta#";
public static final String LOCAL_NAME = "METADATA";
public static final String SCHEMA_NAME = "Schema";
public static final String TABLE_TYPE = "SYSTEM TABLE";
public static final String CATALOGS_TABLE = "Catalogs";
public static final String COLUMNS_TABLE = "Columns";
public static final String COLUMN_PRIVILIGES_TABLE = "ColumnPriviliges";
public static final String EXPORTED_KEYS_TABLE = "ExportedKeys";
public static final String IMPORTED_KEYS_TABLE = "ImportedKeys";
public static final String XREF_TABLE = "XrefKeys";
public static final String TYPEINFO_TABLE = "TypeInfo";
public static final String INDEXINFO_TABLE = "IndexInfo";
public static final String UDT_TABLES = "UDTs";
public static final String SUPER_TYPES_TABLE = "SuperTypes";
public static final String SUPER_TABLES_TABLE = "SuperTables";
public static final String ATTRIBUTES_TABLE = "Attributes";
public static final String SCHEMAS_TABLE = "Schemas";
public static final String CLIENT_INFO_TABLE = "ClientInfo";
public static final String FUNCTIONS_TABLE = "Functions";
public static final String FUNCTION_COLUMNS_TABLE = "FunctionColumns";
public static final String PRIMARY_KEY_TABLE = "PrimaryKeys";
public static final String PROCEDURE_COLUMNS_TABLE = "ProcedureColumns";
public static final String PROCEDURES_TABLE = "Procedures";
public static final String VERSION_COLUMNS_TABLE = "Version";
public static final String TABLE_PRIVILEGES_TABLE = "TablePriv";
public static final String TABLE_TYPES_TABLE = "TableTypes";
public static final String TABLES_TABLE = "Tables";
public static final String BEST_ROW_TABLE = "BestRow";
public static final String REMARK = "Created by MetaCatalogBuilder";
private final ColumnDef nonNullString;
private final ColumnDef nullableString;
private final ColumnDef nonNullInt;
private final ColumnDef nullableInt;
private final ColumnDef nonNullShort;
private final ColumnDef nullableShort;
private final ColumnDef nullableBoolean;
private final ColumnDef nonNullBoolean;
private final Model model;
private final RdfSchema schema;
private final ResourceBuilder resourceBuilder;
private MetaCatalogBuilder(final RdfSchema schema, final Model model) {
this.schema = schema;
this.model = model;
resourceBuilder = new ResourceBuilder(model);
nonNullString = MetaCatalogBuilder.getNonNullStringBuilder().build(
model);
nullableString = MetaCatalogBuilder.getNullStringBuilder().build(model);
nonNullInt = MetaCatalogBuilder.getNonNullIntBuilder().build(model);
nullableInt = MetaCatalogBuilder.getNullIntBuilder().build(model);
nonNullShort = MetaCatalogBuilder.getNonNullShortBuilder().build(model);
nullableShort = MetaCatalogBuilder.getNullShortBuilder().build(model);
nullableBoolean = MetaCatalogBuilder.getNullBooleanBuilder().build(
model);
nonNullBoolean = MetaCatalogBuilder.getNonNullBooleanBuilder().build(
model);
}
private void addAttributesTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString) // TYPE_CAT
.addColumnDef(nonNullString) // TYPE_SCHEM
.addColumnDef(nonNullString) // TYPE_NAME
.addColumnDef(nullableString) // ATTR_NAME
.addColumnDef(nonNullInt) // DATA_TYPE
.addColumnDef(nullableString) // ATTR_TYPE_NAME
.addColumnDef(nullableInt) // ATTR_SIZE
.addColumnDef(nullableInt) // DECIMAL_DIGITS
.addColumnDef(nullableInt) // NUM_PREC_RADIX
.addColumnDef(nonNullInt) // NULLABLE
.addColumnDef(nullableString) // REMARKS
.addColumnDef(nullableString) // ATTR_DEF
.addColumnDef(nonNullInt) // SQL_DATA_TYPE
.addColumnDef(nullableInt) // SQL_DATETIME_SUB
.addColumnDef(nonNullInt) // CHAR_OCTET_LENGTH
.addColumnDef(nonNullInt) // ORDINAL_POSITION
.addColumnDef(nullableString) // IS_NULLABLE
.addColumnDef(nullableString) // SCOPE_CATALOG
.addColumnDef(nullableString) // SCOPE_SCHEMA
.addColumnDef(nullableString) // SCOPE_TABLE
.addColumnDef(nullableShort) // SOURCE_DATA_TYPE
.build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setSchema(schema).setTableDef(tableDef)
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.ATTRIBUTES_TABLE)
.setRemarks(MetaCatalogBuilder.REMARK).setColumn(0, "TYPE_CAT")
.setColumn(1, "TYPE_SCHEM").setColumn(2, "TYPE_NAME")
.setColumn(3, "ATTR_NAME").setColumn(4, "DATA_TYPE")
.setColumn(5, "ATTR_TYPE_NAME").setColumn(6, "ATTR_SIZE")
.setColumn(7, "DECIMAL_DIGITS").setColumn(8, "NUM_PREC_RADIX")
.setColumn(9, "NULLABLE").setColumn(10, "REMARKS")
.setColumn(11, "ATTR_DEF").setColumn(12, "SQL_DATA_TYPE")
.setColumn(13, "SQL_DATETIME_SUB")
.setColumn(14, "CHAR_OCTET_LENGTH")
.setColumn(15, "ORDINAL_POSITION").setColumn(16, "IS_NULLABLE")
.setColumn(17, "SCOPE_CATALOG").setColumn(18, "SCOPE_SCHEMA")
.setColumn(19, "SCOPE_TABLE").setColumn(20, "SOURCE_DATA_TYPE");
setNull(builder);
builder.build(model);
}
private void addBestRowTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString)
// SCOPE
.addColumnDef(nonNullString)
// COLUMN_NAME
.addColumnDef(nonNullInt)
// DATA_TYPE
.addColumnDef(nonNullString)
// TYPE_NAME
.addColumnDef(nullableInt)
// COLUMN_SIZE
.addColumnDef(nullableInt)
// BUFFER_LENGTH
.addColumnDef(nullableInt)
// DECIMAL_DIGITS
.addColumnDef(nullableInt)
// PSEUDO_COLUMN
.setSortKey(
new RdfKey.Builder().addSegment(
new RdfKeySegment.Builder().setAscending(true)
.setIdx(0).build(model)).build(model))
.build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.BEST_ROW_TABLE)
.setColumn(0, "SCOPE").setColumn(1, "COLUMN_NAME")
.setColumn(2, "DATA_TYPE").setColumn(3, "TYPE_NAME")
.setColumn(4, "COLUMN_SIZE").setColumn(5, "BUFFER_LENGTH")
.setColumn(6, "DECIMAL_DIGITS").setColumn(7, "PSEUDO_COLUMN");
setNull(builder).build(model);
}
private void addCatalogsTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString)
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setSchema(schema)
.setTableDef(tableDef)
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.CATALOGS_TABLE)
.setRemarks(MetaCatalogBuilder.REMARK)
.addQuerySegment(
makeQS("%1$s", RDF.type, makeNode(ResourceBuilder
.getFQName(RdfCatalog.class))))
.setColumn(0, "TABLE_CAT");
builder.getColumn(0)
.addQuerySegment(makeQS("%1$s", RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
builder.build(model);
}
private void addClientInfoTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString) // NAME
.addColumnDef(nullableInt) // MAX_LEN
.addColumnDef(nullableString) // DEFAULT_VALUE
.addColumnDef(nullableString) // DESCRIPTION
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setSchema(schema).setTableDef(tableDef)
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.CLIENT_INFO_TABLE)
.setRemarks(MetaCatalogBuilder.REMARK).setColumn(0, "NAME")
.setColumn(1, "MAX_LEN").setColumn(2, "DEFAULT_VALUE")
.setColumn(3, "DESCRIPTION");
setNull(builder).build(model);
}
private void addColumnPriviligesTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TABLE_CAT
.addColumnDef(nullableString) // TABLE_SCHEM
.addColumnDef(nonNullString) // TABLE_NAME
.addColumnDef(nonNullString) // COLUMN_NAME
.addColumnDef(nullableString) // GRANTOR
.addColumnDef(nonNullString) // GRANTEE
.addColumnDef(nonNullString) // PRIVILEGE
.addColumnDef(nonNullString) // IS_GRANTABLE
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(3)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(6)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.COLUMN_PRIVILIGES_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_CAT").setColumn(1, "TABLE_SCHEM")
.setColumn(2, "TABLE_NAME").setColumn(3, "COLUMN_NAME")
.setColumn(4, "GRANTOR").setColumn(5, "GRANTEE")
.setColumn(6, "PRIVILEGE").setColumn(7, "IS_GRANTABLE");
setNull(builder).build(model);
}
private void addColumnsTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString) // TABLE_CAT
.addColumnDef(nonNullString) // TABLE_SCHEM
.addColumnDef(nonNullString) // TABLE_NAME
.addColumnDef(nonNullString) // COLUMN_NAME
.addColumnDef(nonNullInt) // DATA_TYPE
.addColumnDef(nullableString) // TYPE_NAME
.addColumnDef(nonNullInt) // COLUMN_SIZE
.addColumnDef(nullableInt) // BUFFER_LENGTH
.addColumnDef(nullableInt) // DECIMAL_DIGITS
.addColumnDef(nullableInt) // NUM_PREC_RADIX
.addColumnDef(nonNullInt) // NULLABLE
.addColumnDef(nullableString) // REMARKS
.addColumnDef(nullableString) // COLUMN_DEF
.addColumnDef(nullableInt) // SQL_DATA_TYPE
.addColumnDef(nullableInt) // SQL_DATETIME_SUB
.addColumnDef(nullableInt) // CHAR_OCTET_LENGTH
.addColumnDef(nonNullInt) // ORDINAL_POSITION
.addColumnDef(nullableString) // IS_NULLABLE
.addColumnDef(nullableString) // SCOPE_CATLOG
.addColumnDef(nullableString) // SCOPE_SCHEMA
.addColumnDef(nullableString) // SCOPE_TABLE
.addColumnDef(nullableShort) // SOURCE_DATA_TYPE
.addColumnDef(nonNullString) // IS_AUTOINCREMENT
.setPrimaryKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(16)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setSchema(schema).setTableDef(tableDef)
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.COLUMNS_TABLE)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_CAT").setColumn(1, "TABLE_SCHEM")
.setColumn(2, "TABLE_NAME").setColumn(3, "COLUMN_NAME")
.setColumn(4, "DATA_TYPE").setColumn(5, "TYPE_NAME")
.setColumn(6, "COLUMN_SIZE").setColumn(7, "BUFFER_LENGTH")
.setColumn(8, "DECIMAL_DIGITS").setColumn(9, "NUM_PREC_RADIX")
.setColumn(10, "NULLABLE").setColumn(11, "REMARKS")
.setColumn(12, "COLUMN_DEF").setColumn(13, "SQL_DATA_TYPE")
.setColumn(14, "SQL_DATETIME_SUB")
.setColumn(15, "CHAR_OCTET_LENGTH")
.setColumn(16, "ORDINAL_POSITION").setColumn(17, "IS_NULLABLE")
.setColumn(18, "SCOPE_CATLOG").setColumn(19, "SCOPE_SCHEMA")
.setColumn(20, "SCOPE_TABLE").setColumn(21, "SOURCE_DATA_TYPE")
.setColumn(22, "IS_AUTOINCREMENT");
final String vTable = "?" + NameUtils.createUUIDName();
final String vSchema = "?" + NameUtils.createUUIDName();
final String vCat = "?" + NameUtils.createUUIDName();
final String vColDef = "?" + NameUtils.createUUIDName();
final String vInc = "?" + NameUtils.createUUIDName();
final String vCol = "?" + NameUtils.createUUIDName();
final String vOrd = "?" + NameUtils.createUUIDName();
final String vNullable = "?" + NameUtils.createUUIDName();
builder.addQuerySegment(
makeQS("%1$s", RDF.type,
makeNode(ResourceBuilder.getFQName(RdfColumn.class))))
.addQuerySegment(
makeQS("%1$s", resourceBuilder.getProperty(
RdfColumn.class, "table"), vTable))
.addQuerySegment(
makeQS(vSchema, resourceBuilder.getProperty(
RdfSchema.class, "tables"), vTable))
.addQuerySegment(
makeQS(vCat, resourceBuilder.getProperty(
RdfCatalog.class, "schemas"), vSchema))
.addQuerySegment(
makeQS("%1$s", resourceBuilder.getProperty(
RdfColumn.class, "columnDef"), vColDef))
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "autoIncrement"), vInc))
.addQuerySegment(
makeQS(vTable, resourceBuilder.getProperty(
RdfTable.class, "column"), vCol));
// TABLE_CAT
builder.getColumn(0).addQuerySegment(makeQS(vCat, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_SCHEM
builder.getColumn(1)
.addQuerySegment(makeQS(vSchema, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_NAME
builder.getColumn(2)
.addQuerySegment(makeQS(vTable, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// COLUMN_NAME
builder.getColumn(3)
.addQuerySegment(makeQS("%1$s", RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// DATA_TYPE
builder.getColumn(4)
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "type"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TYPE_NAME
builder.getColumn(5)
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "typeName"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// COLUMN_SIZE
builder.getColumn(6)
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "scale"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// BUFFER_LENGTH (not used)
setNull(builder.getColumn(7));
// DECIMAL_DIGITS
setNull(builder.getColumn(8));
// NUM_PREC_RADIX
setNull(builder.getColumn(9));
// NULLABLE
builder.getColumn(10)
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "nullable"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// REMARKS
builder.getColumn(11)
.addQuerySegment(
makeQS("%1$s", resourceBuilder.getProperty(
RdfColumn.class, "remarks"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// COLUMN_DEF
setNull(builder.getColumn(12));
// SQL_DATA_TYPE
setNull(builder.getColumn(13));
// SQL_DATETIME_SUB
setNull(builder.getColumn(14));
// CHAR_OCTET_LENGTH
setNull(builder.getColumn(15));
// ORDINAL_POSITION
builder.getColumn(16)
// list list:index (index member)
.addQuerySegment(
makeQS(vTable, resourceBuilder.getProperty(
RdfTable.class, "column"), "_:columns"))
.addQuerySegment(
makeQS("_:columns",
"http://jena.hpl.hp.com/ARQ/list#index", "( "
+ vOrd + " %1$s )"))
.addQuerySegment("BIND( ( " + vOrd + " + 1 ) as %2$s ).")
.setRemarks(MetaCatalogBuilder.REMARK);
// IS_NULLABLE
builder.getColumn(17)
// YES NO or ""
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "nullable"), vNullable))
.addQuerySegment(
"BIND( if( " + vNullable + " = "
+ ResultSetMetaData.columnNullable
+ ", 'YES', if( " + vNullable + " = "
+ ResultSetMetaData.columnNoNulls
+ ", 'NO', '')) as %2$s)")
.setRemarks(MetaCatalogBuilder.REMARK);
// SCOPE_CATALOG
setNull(builder.getColumn(18));
// SCOPE_SCHEMA
setNull(builder.getColumn(19));
// SCOPE_TABLE
setNull(builder.getColumn(20));
// SOURCE_DATA_TYPE
builder.getColumn(21)
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "type"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// IS_AUTOINCREMENT
builder.getColumn(22)
.addQuerySegment(
makeQS(vColDef, resourceBuilder.getProperty(
RdfColumnDef.class, "autoIncrement"), vInc))
.addQuerySegment(
"BIND( if( " + vInc + ", 'YES', 'NO') as %2$s)")
.setRemarks(MetaCatalogBuilder.REMARK);
builder.build(model);
}
private void addExportedKeysTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // PKTABLE_CAT
.addColumnDef(nullableString) // PKTABLE_SCHEM
.addColumnDef(nonNullString) // PKTABLE_NAME
.addColumnDef(nonNullString) // PKCOLUMN_NAME
.addColumnDef(nullableString) // FKTABLE_CAT
.addColumnDef(nullableString) // FKTABLE_SCHEM
.addColumnDef(nonNullString) // FKTABLE_NAME
.addColumnDef(nonNullString) // FKCOLUMN_NAME
.addColumnDef(nullableShort) // KEY_SEQ
.addColumnDef(nullableShort) // UPDATE_RULE
.addColumnDef(nullableShort) // DELETE_RULE
.addColumnDef(nullableString) // FK_NAME
.addColumnDef(nullableString) // PK_NAME
.addColumnDef(nullableShort) // DEFERRABILITY
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(8)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.EXPORTED_KEYS_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "PKTABLE_CAT").setColumn(1, "PKTABLE_SCHEM")
.setColumn(2, "PKTABLE_NAME").setColumn(3, "PKCOLUMN_NAME")
.setColumn(4, "FKTABLE_CAT").setColumn(5, "FKTABLE_SCHEM")
.setColumn(6, "FKTABLE_NAME").setColumn(7, "FKCOLUMN_NAME")
.setColumn(8, "KEY_SEQ").setColumn(9, "UPDATE_RULE")
.setColumn(10, "DELETE_RULE").setColumn(11, "FK_NAME")
.setColumn(12, "PK_NAME").setColumn(13, "DEFERRABILITY");
setNull(builder).build(model);
}
private void addFunctionColumnsTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // FUNCTION_CAT
.addColumnDef(nullableString) // FUNCTION_SCHEM
.addColumnDef(nonNullString) // FUNCTION_NAME
.addColumnDef(nonNullString) // COLUMN_NAME
.addColumnDef(nullableShort) // COLUMN_TYPE
.addColumnDef(nullableInt) // DATA_TYPE
.addColumnDef(nonNullString) // TYPE_NAME
.addColumnDef(nullableInt) // PRECISION
.addColumnDef(nullableInt) // LENGTH
.addColumnDef(nullableShort) // SCALE
.addColumnDef(nullableShort) // RADIX
.addColumnDef(nullableShort) // NULLABLE
.addColumnDef(nullableString) // REMARKS
.addColumnDef(nullableInt) // CHAR_OCTET_LENGTH
.addColumnDef(nullableInt) // ORDINAL_POSITION
.addColumnDef(nonNullString) // IS_NULLABLE
.addColumnDef(nonNullString) // SPECIFIC_NAME
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(16)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.FUNCTION_COLUMNS_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "FUNCTION_CAT").setColumn(1, "FUNCTION_SCHEM")
.setColumn(2, "FUNCTION_NAME").setColumn(3, "COLUMN_NAME")
.setColumn(4, "COLUMN_TYPE").setColumn(5, "DATA_TYPE")
.setColumn(6, "TYPE_NAME").setColumn(7, "PRECISION")
.setColumn(8, "LENGTH").setColumn(9, "SCALE")
.setColumn(10, "RADIX").setColumn(11, "NULLABLE")
.setColumn(12, "REMARKS").setColumn(13, "CHAR_OCTET_LENGTH")
.setColumn(14, "ORDINAL_POSITION").setColumn(15, "IS_NULLABLE")
.setColumn(16, "SPECIFIC_NAME");
setNull(builder).build(model);
}
private void addFunctionsTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // FUNCTION_CAT
.addColumnDef(nullableString) // FUNCTION_SCHEM
.addColumnDef(nonNullString) // FUNCTION_NAME
.addColumnDef(nonNullString) // REMARKS
.addColumnDef(nonNullShort) // FUNCTION_TYPE
.addColumnDef(nonNullString) // SPECIFIC_NAME
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(5)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.FUNCTIONS_TABLE).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "FUNCTION_CAT").setColumn(1, "FUNCTION_SCHEM")
.setColumn(2, "FUNCTION_NAME").setColumn(3, "REMARKS")
.setColumn(4, "FUNCTION_TYPE").setColumn(5, "SPECIFIC_NAME");
setNull(builder).build(model);
}
private void addImportedKeysTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // PKTABLE_CAT
.addColumnDef(nullableString) // PKTABLE_SCHEM
.addColumnDef(nonNullString) // PKTABLE_NAME
.addColumnDef(nonNullString) // PKCOLUMN_NAME
.addColumnDef(nullableString) // FKTABLE_CAT
.addColumnDef(nullableString) // FKTABLE_SCHEM
.addColumnDef(nonNullString) // FKTABLE_NAME
.addColumnDef(nonNullString) // FKCOLUMN_NAME
.addColumnDef(nullableShort) // KEY_SEQ
.addColumnDef(nullableShort) // UPDATE_RULE
.addColumnDef(nullableShort) // DELETE_RULE
.addColumnDef(nullableString) // FK_NAME
.addColumnDef(nullableString) // PK_NAME
.addColumnDef(nullableShort) // DEFERRABILITY
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(8)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.IMPORTED_KEYS_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "PKTABLE_CAT").setColumn(1, "PKTABLE_SCHEM")
.setColumn(2, "PKTABLE_NAME").setColumn(3, "PKCOLUMN_NAME")
.setColumn(4, "FKTABLE_CAT").setColumn(5, "FKTABLE_SCHEM")
.setColumn(6, "FKTABLE_NAME").setColumn(7, "FKCOLUMN_NAME")
.setColumn(8, "KEY_SEQ").setColumn(9, "UPDATE_RULE")
.setColumn(10, "DELETE_RULE").setColumn(11, "FK_NAME")
.setColumn(12, "PK_NAME").setColumn(13, "DEFERRABILITY");
setNull(builder).build(model);
}
private void addIndexInfoTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TABLE_CAT
.addColumnDef(nullableString) // TABLE_SCHEM
.addColumnDef(nonNullString) // TABLE_NAME
.addColumnDef(nullableBoolean) // NON_UNIQUE
.addColumnDef(nullableString) // INDEX_QUALIFIER
.addColumnDef(nullableString) // INDEX_NAME
.addColumnDef(nullableShort) // TYPE
.addColumnDef(nullableShort) // ORDINAL_POSITION
.addColumnDef(nullableString) // COLUMN_NAME
.addColumnDef(nullableString) // ASC_OR_DESC
.addColumnDef(nullableInt) // CARDINALITY
.addColumnDef(nullableInt) // PAGES
.addColumnDef(nullableString) // FILTER_CONDITION
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(3)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(6)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(5)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.INDEXINFO_TABLE).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_CAT").setColumn(1, "TABLE_SCHEM")
.setColumn(2, "TABLE_NAME").setColumn(3, "NON_UNIQUE")
.setColumn(4, "INDEX_QUALIFIER").setColumn(5, "INDEX_NAME")
.setColumn(6, "TYPE").setColumn(7, "ORDINAL_POSITION")
.setColumn(8, "COLUMN_NAME").setColumn(9, "ASC_OR_DESC")
.setColumn(10, "CARDINALITY").setColumn(11, "PAGES")
.setColumn(12, "FILTER_CONDITION");
setNull(builder).build(model);
}
private void addPrimaryKeyTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TABLE_CAT
.addColumnDef(nullableString) // TABLE_SCHEM
.addColumnDef(nonNullString) // TABLE_NAME
.addColumnDef(nonNullString) // COLUMN_NAME
.addColumnDef(nullableShort) // KEY_SEQ
.addColumnDef(nullableString) // PK_NAME
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(4)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.PRIMARY_KEY_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_CAT").setColumn(1, "TABLE_SCHEM")
.setColumn(2, "TABLE_NAME").setColumn(3, "COLUMN_NAME")
.setColumn(4, "KEY_SEQ").setColumn(5, "PK_NAME");
setNull(builder).build(model);
}
private void addProcedureColumnsTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // PROCEDURE_CAT
.addColumnDef(nullableString) // PROCEDURE_SCHEM
.addColumnDef(nonNullString) // PROCEDURE_NAME
.addColumnDef(nonNullString) // COLUMN_NAME
.addColumnDef(nullableShort) // COLUMN_TYPE
.addColumnDef(nullableInt) // DATA_TYPE
.addColumnDef(nonNullString) // TYPE_NAME
.addColumnDef(nullableInt) // PRECISION
.addColumnDef(nullableInt) // LENGTH
.addColumnDef(nullableShort) // SCALE
.addColumnDef(nullableShort) // RADIX
.addColumnDef(nullableShort) // NULLABLE
.addColumnDef(nonNullString) // REMARKS
.addColumnDef(nullableString) // COLUMN_DEF
.addColumnDef(nullableInt) // SQL_DATA_TYPE
.addColumnDef(nullableInt) // SQL_DATETIME_SUB
.addColumnDef(nullableInt) // CHAR_OCTET_LENGTH
.addColumnDef(nullableInt) // ORDINAL_POSITION
.addColumnDef(nonNullString) // IS_NULLABLE
.addColumnDef(nonNullString) // SPECIFIC_NAME
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(19)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.PROCEDURE_COLUMNS_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "PROCEDURE_CAT").setColumn(1, "PROCEDURE_SCHEM")
.setColumn(2, "PROCEDURE_NAME").setColumn(3, "COLUMN_NAME")
.setColumn(4, "COLUMN_TYPE").setColumn(5, "DATA_TYPE")
.setColumn(6, "TYPE_NAME").setColumn(7, "PRECISION")
.setColumn(8, "LENGTH").setColumn(9, "SCALE")
.setColumn(10, "RADIX").setColumn(11, "NULLABLE")
.setColumn(12, "REMARKS").setColumn(13, "COLUMN_DEF")
.setColumn(14, "SQL_DATA_TYPE")
.setColumn(15, "SQL_DATETIME_SUB")
.setColumn(16, "CHAR_OCTET_LENGTH")
.setColumn(17, "ORDINAL_POSITION").setColumn(18, "IS_NULLABLE")
.setColumn(19, "SPECIFIC_NAME");
setNull(builder).build(model);
}
private void addProceduresTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // PROCEDURE_CAT
.addColumnDef(nullableString) // PROCEDURE_SCHEM
.addColumnDef(nonNullString) // PROCEDURE_NAME
.addColumnDef(nullableString) // FUTURE1
.addColumnDef(nullableString) // FUTURE2
.addColumnDef(nullableString) // FUTURE3
.addColumnDef(nonNullString) // REMARKS
.addColumnDef(nonNullShort) // PROCEDURE_TYPE
.addColumnDef(nonNullString) // SPECIFIC_NAME
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(8)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.PROCEDURES_TABLE).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "PROCEDURE_CAT").setColumn(1, "PROCEDURE_SCHEM")
.setColumn(2, "PROCEDURE_NAME").setColumn(3, "FUTURE1")
.setColumn(4, "FUTURE2").setColumn(5, "FUTURE3")
.setColumn(6, "REMARKS").setColumn(7, "PROCEDURE_TYPE")
.setColumn(8, "SPECIFIC_NAME");
setNull(builder).build(model);
}
private void addSchemasTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString) // TABLE_SCHEM
.addColumnDef(nullableString) // TABLE_CATALOG
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.SCHEMAS_TABLE).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_SCHEM").setColumn(1, "TABLE_CATALOG");
final String vCat = "?" + NameUtils.createUUIDName();
builder.addQuerySegment(
makeQS("%1$s", RDF.type,
makeNode(ResourceBuilder.getFQName(RdfSchema.class))))
.addQuerySegment(
makeQS(vCat, resourceBuilder.getProperty(
RdfCatalog.class, "schemas"), "%1$s"));
// TABLE_SCHEM
builder.getColumn(0)
.addQuerySegment(makeQS("%1$s", RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_CAT
builder.getColumn(1).addQuerySegment(makeQS(vCat, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
builder.build(model);
}
private void addSuperTablesTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TABLE_CAT
.addColumnDef(nullableString) // TABLE_SCHEM
.addColumnDef(nonNullString) // TABLE_NAME
.addColumnDef(nonNullString) // SUPERTABLE_NAME
.build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.SUPER_TABLES_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_CAT").setColumn(1, "TABLE_SCHEM")
.setColumn(2, "TABLE_NAME").setColumn(3, "SUPERTABLE_NAME");
final String vSchema = "?" + NameUtils.createUUIDName();
final String vCat = "?" + NameUtils.createUUIDName();
builder.addQuerySegment(
makeQS("%1$s", RDF.type,
makeNode(ResourceBuilder.getFQName(RdfTable.class))))
.addQuerySegment(
makeQS(vSchema, resourceBuilder.getProperty(
RdfSchema.class, "tables"), "%1$s"))
.addQuerySegment(
makeQS(vCat, resourceBuilder.getProperty(
RdfCatalog.class, "schemas"), vSchema));
// TABLE_CAT
builder.getColumn(0).addQuerySegment(makeQS(vCat, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_SCHEM
builder.getColumn(1)
.addQuerySegment(makeQS(vSchema, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_NAME
builder.getColumn(2)
.addQuerySegment(makeQS("%1$s", RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
setNull(builder.getColumn(3));
builder.build(model);
}
private void addSuperTypesTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TYPE_CAT
.addColumnDef(nullableString) // TYPE_SCHEM
.addColumnDef(nonNullString) // TYPE_NAME
.addColumnDef(nullableString) // SUPERTYPE_CAT
.addColumnDef(nullableString) // SUPERTYPE_SCHEM
.addColumnDef(nonNullString) // SUPERTYPE_NAME
.build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.SUPER_TYPES_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK).setColumn(0, "TYPE_CAT")
.setColumn(1, "TYPE_SCHEM").setColumn(2, "TYPE_NAME")
.setColumn(3, "SUPERTYPE_CAT").setColumn(4, "SUPERTYPE_SCHEM")
.setColumn(5, "SUPERTYPE_NAME");
setNull(builder).build(model);
}
private void addTablePrivilegesTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TABLE_CAT
.addColumnDef(nullableString) // TABLE_SCHEM
.addColumnDef(nonNullString) // TABLE_NAME
.addColumnDef(nullableString) // GRANTOR
.addColumnDef(nonNullString) // GRANTEE
.addColumnDef(nonNullString) // PRIVILEGE
.addColumnDef(nonNullString) // IS_GRANTABLE
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(5)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.TABLE_PRIVILEGES_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_CAT").setColumn(1, "TABLE_SCHEM")
.setColumn(2, "TABLE_NAME").setColumn(3, "GRANTOR")
.setColumn(4, "GRANTEE").setColumn(5, "PRIVILEGE")
.setColumn(6, "IS_GRANTABLE");
setNull(builder).build(model);
}
private void addTablesTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TABLE_CAT
.addColumnDef(nullableString) // TABLE_SCHEM
.addColumnDef(nonNullString) // TABLE_NAME
.addColumnDef(nonNullString) // TABLE_TYPE
.addColumnDef(nonNullString) // REMARKS
.addColumnDef(nullableString) // TYPE_CAT
.addColumnDef(nullableString) // TYPE_SCHEM
.addColumnDef(nullableString) // TYPE_NAME
.addColumnDef(nullableString) // SELF_REFERENCING_COL_NAME
.addColumnDef(nullableString) // REF_GENERATION
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(3)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.TABLES_TABLE).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TABLE_CAT").setColumn(1, "TABLE_SCHEM")
.setColumn(2, "TABLE_NAME").setColumn(3, "TABLE_TYPE")
.setColumn(4, "REMARKS").setColumn(5, "TYPE_CAT")
.setColumn(6, "TYPE_SCHEM").setColumn(7, "TYPE_NAME")
.setColumn(8, "SELF_REFERENCING_COL_NAME")
.setColumn(9, "REF_GENERATION");
final String vSchema = "?" + NameUtils.createUUIDName();
final String vCat = "?" + NameUtils.createUUIDName();
builder.addQuerySegment(
makeQS("%1$s", RDF.type,
makeNode(ResourceBuilder.getFQName(RdfTable.class))))
.addQuerySegment(
makeQS(vSchema, resourceBuilder.getProperty(
RdfSchema.class, "tables"), "%1$s"))
.addQuerySegment(
makeQS(vCat, resourceBuilder.getProperty(
RdfCatalog.class, "schemas"), vSchema));
// TABLE_CAT
builder.getColumn(0).addQuerySegment(makeQS(vCat, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_SCHEM
builder.getColumn(1)
.addQuerySegment(makeQS(vSchema, RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_NAME
builder.getColumn(2)
.addQuerySegment(makeQS("%1$s", RDFS.label, "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TABLE_TYPE
builder.getColumn(3)
.addQuerySegment(
makeQS("%1$s", resourceBuilder.getProperty(
RdfTable.class, "type"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// REMARKS
builder.getColumn(4)
.addQuerySegment(
makeQS("%1$s", resourceBuilder.getProperty(
RdfTable.class, "remarks"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
// TYPE_CAT TYPE_SCHEM TYPE_NAME SELF_REFERENCING_COL_NAME
// REF_GENERATION
for (int i = 5; i < 10; i++) {
setNull(builder.getColumn(i));
}
builder.build(model);
}
private void addTableTypesTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString) // TABLE_TYPE
.setPrimaryKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model)).setUnique(true)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.TABLE_TYPES_TABLE)
.setSchema(schema)
.setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK)
.addQuerySegment(
makeQS("%1$s", RDF.type, makeNode(ResourceBuilder
.getFQName(RdfTable.class))))
.setColumn(0, "TABLE_TYPE");
builder.getColumn(0)
.addQuerySegment(
makeQS("%1$s", resourceBuilder.getProperty(
RdfTable.class, "type"), "%2$s"))
.setRemarks(MetaCatalogBuilder.REMARK);
builder.build(model);
}
private void addTypeInfoTableTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nonNullString) // TYPE_NAME
.addColumnDef(nullableInt) // DATA_TYPE
.addColumnDef(nullableInt) // PRECISION
.addColumnDef(nullableString) // LITERAL_PREFIX
.addColumnDef(nullableString) // LITERAL_SUFFIX
.addColumnDef(nullableString) // CREATE_PARAMS
.addColumnDef(nullableShort) // NULLABLE
.addColumnDef(nonNullBoolean) // CASE_SENSITIVE
.addColumnDef(nullableShort) // SEARCHABLE
.addColumnDef(nonNullBoolean) // UNSIGNED_ATTRIBUTE
.addColumnDef(nullableBoolean) // FIXED_PREC_SCALE
.addColumnDef(nullableBoolean) // AUTO_INCREMENT
.addColumnDef(nullableString) // LOCAL_TYPE_NAME
.addColumnDef(nullableShort) // MINIMUM_SCALE
.addColumnDef(nullableShort) // MAXIMUM_SCALE
.addColumnDef(nullableInt) // SQL_DATA_TYPE
.addColumnDef(nullableInt) // SQL_DATETIME_SUB
.addColumnDef(nullableInt) // NUM_PREC_RADIX
.build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.TYPEINFO_TABLE).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TYPE_NAME").setColumn(1, "DATA_TYPE")
.setColumn(2, "PRECISION").setColumn(3, "LITERAL_PREFIX")
.setColumn(4, "LITERAL_SUFFIX").setColumn(5, "CREATE_PARAMS")
.setColumn(6, "NULLABLE").setColumn(7, "CASE_SENSITIVE")
.setColumn(8, "SEARCHABLE").setColumn(9, "UNSIGNED_ATTRIBUTE")
.setColumn(10, "FIXED_PREC_SCALE")
.setColumn(11, "AUTO_INCREMENT")
.setColumn(12, "LOCAL_TYPE_NAME")
.setColumn(13, "MINIMUM_SCALE").setColumn(14, "MAXIMUM_SCALE")
.setColumn(15, "SQL_DATA_TYPE")
.setColumn(16, "SQL_DATETIME_SUB")
.setColumn(17, "NUM_PREC_RADIX");
setNull(builder).build(model);
}
private void addUDTTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // TYPE_CAT
.addColumnDef(nullableString) // TYPE_SCHEM
.addColumnDef(nonNullString) // TYPE_NAME
.addColumnDef(nonNullString) // CLASS_NAME
.addColumnDef(nullableInt) // DATA_TYPE
.addColumnDef(nonNullString) // REMARKS
.addColumnDef(nullableShort) // BASE_TYPE
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(4)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(0)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(1)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(2)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.UDT_TABLES).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "TYPE_CAT").setColumn(1, "TYPE_SCHEM")
.setColumn(2, "TYPE_NAME").setColumn(3, "CLASS_NAME")
.setColumn(4, "DATA_TYPE").setColumn(5, "REMARKS")
.setColumn(6, "BASE_TYPE");
setNull(builder).build(model);
}
private void addVersionColumnsTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableShort) // SCOPE
.addColumnDef(nonNullString) // COLUMN_NAME
.addColumnDef(nullableInt) // DATA_TYPE
.addColumnDef(nonNullString) // TYPE_NAME
.addColumnDef(nullableInt) // COLUMN_SIZE
.addColumnDef(nullableInt) // BUFFER_LENGTH
.addColumnDef(nullableShort) // DECIMAL_DIGITS
.addColumnDef(nullableShort) // PSEUDO_COLUMN
.build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.VERSION_COLUMNS_TABLE)
.setSchema(schema).setTableDef(tableDef)
.setRemarks(MetaCatalogBuilder.REMARK).setColumn(0, "SCOPE")
.setColumn(1, "COLUMN_NAME").setColumn(2, "DATA_TYPE")
.setColumn(3, "TYPE_NAME").setColumn(4, "COLUMN_SIZE")
.setColumn(5, "BUFFER_LENGTH").setColumn(6, "DECIMAL_DIGITS")
.setColumn(7, "PSEUDO_COLUMN");
setNull(builder).build(model);
}
private void addXrefTable() {
final RdfTableDef tableDef = new RdfTableDef.Builder()
.addColumnDef(nullableString) // PKTABLE_CAT
.addColumnDef(nullableString) // PKTABLE_SCHEM
.addColumnDef(nonNullString) // PKTABLE_NAME
.addColumnDef(nonNullString) // PKCOLUMN_NAME
.addColumnDef(nullableString) // FKTABLE_CAT
.addColumnDef(nullableString) // FKTABLE_SCHEM
.addColumnDef(nonNullString) // FKTABLE_NAME
.addColumnDef(nonNullString) // FKCOLUMN_NAME
.addColumnDef(nullableShort) // KEY_SEQ
.addColumnDef(nullableShort) // UPDATE_RULE
.addColumnDef(nullableShort) // DELETE_RULE
.addColumnDef(nullableString) // FK_NAME
.addColumnDef(nullableString) // PK_NAME
.addColumnDef(nullableShort) // DEFERRABILITY
.setSortKey(
new RdfKey.Builder()
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(4)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(5)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(6)
.build(model))
.addSegment(
new RdfKeySegment.Builder()
.setAscending(true).setIdx(7)
.build(model)).setUnique(false)
.build(model)).build(model);
final RdfTable.Builder builder = new RdfTable.Builder()
.setType(MetaCatalogBuilder.TABLE_TYPE)
.setName(MetaCatalogBuilder.XREF_TABLE).setSchema(schema)
.setTableDef(tableDef).setRemarks(MetaCatalogBuilder.REMARK)
.setColumn(0, "PKTABLE_CAT").setColumn(1, "PKTABLE_SCHEM")
.setColumn(2, "PKTABLE_NAME").setColumn(3, "PKCOLUMN_NAME")
.setColumn(4, "FKTABLE_CAT").setColumn(5, "FKTABLE_SCHEM")
.setColumn(6, "FKTABLE_NAME").setColumn(7, "FKCOLUMN_NAME")
.setColumn(8, "KEY_SEQ").setColumn(9, "UPDATE_RULE")
.setColumn(10, "DELETE_RULE").setColumn(11, "FK_NAME")
.setColumn(12, "PK_NAME").setColumn(13, "DEFERRABILITY");
setNull(builder).build(model);
}
public void build() {
addAttributesTable();
addBestRowTable();
addCatalogsTable();
addClientInfoTable();
addColumnsTable();
addExportedKeysTable();
addFunctionColumnsTable();
addFunctionsTable();
addImportedKeysTable();
addIndexInfoTable();
addPrimaryKeyTable();
addProcedureColumnsTable();
addProceduresTable();
addSchemasTable();
addSuperTablesTable();
addSuperTypesTable();
addTablePrivilegesTable();
addTablesTable();
addTableTypesTable();
addColumnPriviligesTable();
addTypeInfoTableTable();
addUDTTable();
addVersionColumnsTable();
addXrefTable();
}
private String makeNode(final String s) {
return String.format("<%s>", s);
}
private String makeQS(final String s, final Property p, final String o) {
return makeQS(s, p.getURI(), o);
}
private String makeQS(final String s, final String p, final String o) {
return String.format("%s <%s> %s .", s, p, o);
}
private RdfColumn.Builder setNull(final RdfColumn.Builder colBuilder) {
colBuilder.addQuerySegment(
"%1$s <http://org.xenei.jdbc4sparql/entity/Table#null> %2$s .")
.setRemarks(MetaCatalogBuilder.REMARK);
return colBuilder;
}
private RdfTable.Builder setNull(final RdfTable.Builder tblBuilder) {
tblBuilder
.addQuerySegment("%1$s a <http://org.xenei.jdbc4sparql/entity/Table#null> . ");
for (int i = 0; i < tblBuilder.getColumnCount(); i++) {
setNull(tblBuilder.getColumn(i));
}
return tblBuilder;
}
}