use of org.h2.value.ValueInteger in project h2database by h2database.
the class DatabaseMetaLocal method getProcedureColumnAdd.
private void getProcedureColumnAdd(SimpleResult result, Value catalogValue, Value schemaValue, Value procedureNameValue, Value specificNameValue, TypeInfo type, boolean notNull, int ordinal) {
int valueType = type.getValueType();
DataType dt = DataType.getDataType(valueType);
ValueInteger precisionValue = ValueInteger.get(MathUtils.convertLongToInt(type.getPrecision()));
result.addRow(// PROCEDURE_CAT
catalogValue, // PROCEDURE_SCHEM
schemaValue, // PROCEDURE_NAME
procedureNameValue, // COLUMN_NAME
getString(ordinal == 0 ? "RESULT" : "P" + ordinal), // COLUMN_TYPE
ordinal == 0 ? PROCEDURE_COLUMN_RETURN : PROCEDURE_COLUMN_IN, // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(type)), // TYPE_NAME
getDataTypeName(type), // PRECISION
precisionValue, // LENGTH
precisionValue, // SCALE
//
dt.supportsScale ? ValueSmallint.get(MathUtils.convertIntToShort(dt.defaultScale)) : ValueNull.INSTANCE, // RADIX
getRadix(valueType, true), // NULLABLE
notNull ? COLUMN_NO_NULLS_SMALL : COLUMN_NULLABLE_UNKNOWN_SMALL, // REMARKS
ValueNull.INSTANCE, // COLUMN_DEF
ValueNull.INSTANCE, // SQL_DATA_TYPE
ValueNull.INSTANCE, // SQL_DATETIME_SUB
ValueNull.INSTANCE, // CHAR_OCTET_LENGTH
DataType.isBinaryStringType(valueType) || DataType.isCharacterStringType(valueType) ? precisionValue : ValueNull.INSTANCE, // ORDINAL_POSITION
ValueInteger.get(ordinal), // IS_NULLABLE
ValueVarchar.EMPTY, // SPECIFIC_NAME
specificNameValue);
}
use of org.h2.value.ValueInteger in project h2database by h2database.
the class DatabaseMetaLocal method getPseudoColumnsAdd.
private void getPseudoColumnsAdd(SimpleResult result, Value catalogValue, Value schemaValue, Value tableName, CompareLike columnLike, Column c) {
String name = c.getName();
if (columnLike != null && !columnLike.test(name)) {
return;
}
TypeInfo type = c.getType();
ValueInteger precision = ValueInteger.get(MathUtils.convertLongToInt(type.getPrecision()));
result.addRow(// TABLE_CAT
catalogValue, // TABLE_SCHEM
schemaValue, // TABLE_NAME
tableName, // COLUMN_NAME
getString(name), // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(type)), // COLUMN_SIZE
precision, // DECIMAL_DIGITS
ValueInteger.get(type.getScale()), // NUM_PREC_RADIX
getRadix(type.getValueType(), false), // COLUMN_USAGE
NO_USAGE_RESTRICTIONS, // REMARKS
getString(c.getComment()), // CHAR_OCTET_LENGTH
precision, // IS_NULLABLE
c.isNullable() ? YES : NO);
}
use of org.h2.value.ValueInteger in project h2database by h2database.
the class InformationSchemaTableLegacy method generateRows.
@Override
public ArrayList<Row> generateRows(SessionLocal session, SearchRow first, SearchRow last) {
Value indexFrom = null, indexTo = null;
if (indexColumn >= 0) {
if (first != null) {
indexFrom = first.getValue(indexColumn);
}
if (last != null) {
indexTo = last.getValue(indexColumn);
}
}
ArrayList<Row> rows = Utils.newSmallArrayList();
String catalog = database.getShortName();
boolean admin = session.getUser().isAdmin();
switch(type) {
case TABLES:
{
for (Table table : getAllTables(session)) {
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
if (hideTable(table, session)) {
continue;
}
String storageType;
if (table.isTemporary()) {
if (table.isGlobalTemporary()) {
storageType = "GLOBAL TEMPORARY";
} else {
storageType = "LOCAL TEMPORARY";
}
} else {
storageType = table.isPersistIndexes() ? "CACHED" : "MEMORY";
}
String sql = table.getCreateSQL();
if (!admin) {
if (sql != null && sql.contains(DbException.HIDE_SQL)) {
// hide the password of linked tables
sql = "-";
}
}
add(session, rows, // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // TABLE_TYPE
table.getTableType().toString(), // STORAGE_TYPE
storageType, // SQL
sql, // REMARKS
replaceNullWithEmpty(table.getComment()), // LAST_MODIFICATION
ValueBigint.get(table.getMaxDataModificationId()), // ID
ValueInteger.get(table.getId()), // TYPE_NAME
null, // TABLE_CLASS
table.getClass().getName(), // ROW_COUNT_ESTIMATE
ValueBigint.get(table.getRowCountApproximation(session)));
}
break;
}
case COLUMNS:
{
// reduce the number of tables to scan - makes some metadata queries
// 10x faster
final ArrayList<Table> tablesToList;
if (indexFrom != null && indexFrom.equals(indexTo)) {
String tableName = indexFrom.getString();
if (tableName == null) {
break;
}
tablesToList = getTablesByName(session, tableName);
} else {
tablesToList = getAllTables(session);
}
for (Table table : tablesToList) {
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
if (hideTable(table, session)) {
continue;
}
Column[] cols = table.getColumns();
String collation = database.getCompareMode().getName();
for (int j = 0; j < cols.length; j++) {
Column c = cols[j];
Domain domain = c.getDomain();
TypeInfo typeInfo = c.getType();
ValueInteger precision = ValueInteger.get(MathUtils.convertLongToInt(typeInfo.getPrecision()));
ValueInteger scale = ValueInteger.get(typeInfo.getScale());
Sequence sequence = c.getSequence();
boolean hasDateTimePrecision;
int type = typeInfo.getValueType();
switch(type) {
case Value.TIME:
case Value.TIME_TZ:
case Value.DATE:
case Value.TIMESTAMP:
case Value.TIMESTAMP_TZ:
case Value.INTERVAL_SECOND:
case Value.INTERVAL_DAY_TO_SECOND:
case Value.INTERVAL_HOUR_TO_SECOND:
case Value.INTERVAL_MINUTE_TO_SECOND:
hasDateTimePrecision = true;
break;
default:
hasDateTimePrecision = false;
}
boolean isGenerated = c.isGenerated();
boolean isInterval = DataType.isIntervalType(type);
String createSQLWithoutName = c.getCreateSQLWithoutName();
add(session, rows, // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // COLUMN_NAME
c.getName(), // ORDINAL_POSITION
ValueInteger.get(j + 1), // COLUMN_DEFAULT
isGenerated ? null : c.getDefaultSQL(), // IS_NULLABLE
c.isNullable() ? "YES" : "NO", // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(typeInfo)), // CHARACTER_MAXIMUM_LENGTH
precision, // CHARACTER_OCTET_LENGTH
precision, // NUMERIC_PRECISION
precision, // NUMERIC_PRECISION_RADIX
ValueInteger.get(10), // NUMERIC_SCALE
scale, // DATETIME_PRECISION
hasDateTimePrecision ? scale : null, // INTERVAL_TYPE
isInterval ? createSQLWithoutName.substring(9) : null, // INTERVAL_PRECISION
isInterval ? precision : null, // CHARACTER_SET_NAME
CHARACTER_SET_NAME, // COLLATION_NAME
collation, // DOMAIN_CATALOG
domain != null ? catalog : null, // DOMAIN_SCHEMA
domain != null ? domain.getSchema().getName() : null, // DOMAIN_NAME
domain != null ? domain.getName() : null, // IS_GENERATED
isGenerated ? "ALWAYS" : "NEVER", // GENERATION_EXPRESSION
isGenerated ? c.getDefaultSQL() : null, // TYPE_NAME
identifier(isInterval ? "INTERVAL" : typeInfo.getDeclaredTypeName()), // NULLABLE
ValueInteger.get(c.isNullable() ? DatabaseMetaData.columnNullable : DatabaseMetaData.columnNoNulls), // IS_COMPUTED
ValueBoolean.get(isGenerated), // SELECTIVITY
ValueInteger.get(c.getSelectivity()), // SEQUENCE_NAME
sequence == null ? null : sequence.getName(), // REMARKS
replaceNullWithEmpty(c.getComment()), // SMALLINT
null, // COLUMN_TYPE
createSQLWithoutName, // COLUMN_ON_UPDATE
c.getOnUpdateSQL(), // IS_VISIBLE
ValueBoolean.get(c.getVisible()), // CHECK_CONSTRAINT
null);
}
}
break;
}
case INDEXES:
{
// reduce the number of tables to scan - makes some metadata queries
// 10x faster
final ArrayList<Table> tablesToList;
if (indexFrom != null && indexFrom.equals(indexTo)) {
String tableName = indexFrom.getString();
if (tableName == null) {
break;
}
tablesToList = getTablesByName(session, tableName);
} else {
tablesToList = getAllTables(session);
}
for (Table table : tablesToList) {
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
if (hideTable(table, session)) {
continue;
}
ArrayList<Index> indexes = table.getIndexes();
ArrayList<Constraint> constraints = table.getConstraints();
for (int j = 0; indexes != null && j < indexes.size(); j++) {
Index index = indexes.get(j);
if (index.getCreateSQL() == null) {
continue;
}
String constraintName = null;
for (int k = 0; constraints != null && k < constraints.size(); k++) {
Constraint constraint = constraints.get(k);
if (constraint.usesIndex(index)) {
if (index.getIndexType().isPrimaryKey()) {
if (constraint.getConstraintType() == Constraint.Type.PRIMARY_KEY) {
constraintName = constraint.getName();
}
} else {
constraintName = constraint.getName();
}
}
}
IndexColumn[] cols = index.getIndexColumns();
int uniqueColumnCount = index.getUniqueColumnCount();
String indexClass = index.getClass().getName();
for (int k = 0; k < cols.length; k++) {
IndexColumn idxCol = cols[k];
Column column = idxCol.column;
add(session, rows, // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // NON_UNIQUE
ValueBoolean.get(k >= uniqueColumnCount), // INDEX_NAME
index.getName(), // ORDINAL_POSITION
ValueSmallint.get((short) (k + 1)), // COLUMN_NAME
column.getName(), // CARDINALITY
ValueInteger.get(0), // PRIMARY_KEY
ValueBoolean.get(index.getIndexType().isPrimaryKey()), // INDEX_TYPE_NAME
index.getIndexType().getSQL(), // IS_GENERATED
ValueBoolean.get(index.getIndexType().getBelongsToConstraint()), // INDEX_TYPE
ValueSmallint.get(DatabaseMetaData.tableIndexOther), // ASC_OR_DESC
(idxCol.sortType & SortOrder.DESCENDING) != 0 ? "D" : "A", // PAGES
ValueInteger.get(0), // FILTER_CONDITION
"", // REMARKS
replaceNullWithEmpty(index.getComment()), // SQL
index.getCreateSQL(), // ID
ValueInteger.get(index.getId()), // SORT_TYPE
ValueInteger.get(idxCol.sortType), // CONSTRAINT_NAME
constraintName, // INDEX_CLASS
indexClass);
}
}
}
break;
}
case TABLE_TYPES:
{
add(session, rows, TableType.TABLE.toString());
add(session, rows, TableType.TABLE_LINK.toString());
add(session, rows, TableType.SYSTEM_TABLE.toString());
add(session, rows, TableType.VIEW.toString());
add(session, rows, TableType.EXTERNAL_TABLE_ENGINE.toString());
break;
}
case TYPE_INFO:
{
for (int i = 1, l = Value.TYPE_COUNT; i < l; i++) {
DataType t = DataType.getDataType(i);
add(session, rows, // TYPE_NAME
Value.getTypeName(t.type), // DATA_TYPE
ValueInteger.get(t.sqlType), // PRECISION
ValueInteger.get(MathUtils.convertLongToInt(t.maxPrecision)), // PREFIX
t.prefix, // SUFFIX
t.suffix, // PARAMS
t.params, // AUTO_INCREMENT
ValueBoolean.FALSE, // MINIMUM_SCALE
ValueSmallint.get(MathUtils.convertIntToShort(t.minScale)), // MAXIMUM_SCALE
ValueSmallint.get(MathUtils.convertIntToShort(t.maxScale)), // RADIX
DataType.isNumericType(i) ? ValueInteger.get(10) : null, // POS
ValueInteger.get(t.type), // CASE_SENSITIVE
ValueBoolean.get(t.caseSensitive), // NULLABLE
ValueSmallint.get((short) DatabaseMetaData.typeNullable), // SEARCHABLE
ValueSmallint.get((short) DatabaseMetaData.typeSearchable));
}
break;
}
case CATALOGS:
{
add(session, rows, catalog);
break;
}
case SETTINGS:
{
for (Setting s : database.getAllSettings()) {
String value = s.getStringValue();
if (value == null) {
value = Integer.toString(s.getIntValue());
}
add(session, rows, identifier(s.getName()), value);
}
add(session, rows, "info.BUILD_ID", "" + Constants.BUILD_ID);
add(session, rows, "info.VERSION_MAJOR", "" + Constants.VERSION_MAJOR);
add(session, rows, "info.VERSION_MINOR", "" + Constants.VERSION_MINOR);
add(session, rows, "info.VERSION", Constants.FULL_VERSION);
if (admin) {
String[] settings = { "java.runtime.version", "java.vm.name", "java.vendor", "os.name", "os.arch", "os.version", "sun.os.patch.level", "file.separator", "path.separator", "line.separator", "user.country", "user.language", "user.variant", "file.encoding" };
for (String s : settings) {
add(session, rows, "property." + s, Utils.getProperty(s, ""));
}
}
add(session, rows, "DEFAULT_NULL_ORDERING", database.getDefaultNullOrdering().name());
add(session, rows, "EXCLUSIVE", database.getExclusiveSession() == null ? "FALSE" : "TRUE");
add(session, rows, "MODE", database.getMode().getName());
add(session, rows, "QUERY_TIMEOUT", Integer.toString(session.getQueryTimeout()));
add(session, rows, "TIME ZONE", session.currentTimeZone().getId());
add(session, rows, "TRUNCATE_LARGE_LENGTH", session.isTruncateLargeLength() ? "TRUE" : "FALSE");
add(session, rows, "VARIABLE_BINARY", session.isVariableBinary() ? "TRUE" : "FALSE");
add(session, rows, "OLD_INFORMATION_SCHEMA", session.isOldInformationSchema() ? "TRUE" : "FALSE");
BitSet nonKeywords = session.getNonKeywords();
if (nonKeywords != null) {
add(session, rows, "NON_KEYWORDS", Parser.formatNonKeywords(nonKeywords));
}
add(session, rows, "RETENTION_TIME", Integer.toString(database.getRetentionTime()));
// database settings
for (Map.Entry<String, String> entry : database.getSettings().getSortedSettings()) {
add(session, rows, entry.getKey(), entry.getValue());
}
Store store = database.getStore();
MVStore mvStore = store.getMvStore();
FileStore fs = mvStore.getFileStore();
if (fs != null) {
add(session, rows, "info.FILE_WRITE", Long.toString(fs.getWriteCount()));
add(session, rows, "info.FILE_WRITE_BYTES", Long.toString(fs.getWriteBytes()));
add(session, rows, "info.FILE_READ", Long.toString(fs.getReadCount()));
add(session, rows, "info.FILE_READ_BYTES", Long.toString(fs.getReadBytes()));
add(session, rows, "info.UPDATE_FAILURE_PERCENT", String.format(Locale.ENGLISH, "%.2f%%", 100 * mvStore.getUpdateFailureRatio()));
add(session, rows, "info.FILL_RATE", Integer.toString(mvStore.getFillRate()));
add(session, rows, "info.CHUNKS_FILL_RATE", Integer.toString(mvStore.getChunksFillRate()));
add(session, rows, "info.CHUNKS_FILL_RATE_RW", Integer.toString(mvStore.getRewritableChunksFillRate()));
try {
add(session, rows, "info.FILE_SIZE", Long.toString(fs.getFile().size()));
} catch (IOException ignore) {
/**/
}
add(session, rows, "info.CHUNK_COUNT", Long.toString(mvStore.getChunkCount()));
add(session, rows, "info.PAGE_COUNT", Long.toString(mvStore.getPageCount()));
add(session, rows, "info.PAGE_COUNT_LIVE", Long.toString(mvStore.getLivePageCount()));
add(session, rows, "info.PAGE_SIZE", Integer.toString(mvStore.getPageSplitSize()));
add(session, rows, "info.CACHE_MAX_SIZE", Integer.toString(mvStore.getCacheSize()));
add(session, rows, "info.CACHE_SIZE", Integer.toString(mvStore.getCacheSizeUsed()));
add(session, rows, "info.CACHE_HIT_RATIO", Integer.toString(mvStore.getCacheHitRatio()));
add(session, rows, "info.TOC_CACHE_HIT_RATIO", Integer.toString(mvStore.getTocCacheHitRatio()));
add(session, rows, "info.LEAF_RATIO", Integer.toString(mvStore.getLeafRatio()));
}
break;
}
case HELP:
{
String resource = "/org/h2/res/help.csv";
try {
final byte[] data = Utils.getResource(resource);
final Reader reader = new InputStreamReader(new ByteArrayInputStream(data), StandardCharsets.UTF_8);
final Csv csv = new Csv();
csv.setLineCommentCharacter('#');
final ResultSet rs = csv.read(reader, null);
final int columnCount = rs.getMetaData().getColumnCount() - 1;
final String[] values = new String[5];
for (int i = 0; rs.next(); i++) {
for (int j = 0; j < columnCount; j++) {
String s = rs.getString(1 + j);
switch(j) {
case // SYNTAX column
2:
// Strip out the special annotations we use to help build
// the railroad/BNF diagrams
s = Help.stripAnnotationsFromSyntax(s);
break;
case // TEXT column
3:
s = Help.processHelpText(s);
}
values[j] = s.trim();
}
add(session, rows, // ID
ValueInteger.get(i), // SECTION
values[0], // TOPIC
values[1], // SYNTAX
values[2], // TEXT
values[3]);
}
} catch (Exception e) {
throw DbException.convert(e);
}
break;
}
case SEQUENCES:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.SEQUENCE)) {
Sequence s = (Sequence) obj;
TypeInfo dataType = s.getDataType();
String dataTypeName = Value.getTypeName(dataType.getValueType());
ValueInteger declaredScale = ValueInteger.get(dataType.getScale());
add(session, rows, // SEQUENCE_CATALOG
catalog, // SEQUENCE_SCHEMA
s.getSchema().getName(), // SEQUENCE_NAME
s.getName(), // DATA_TYPE
dataTypeName, // NUMERIC_PRECISION
ValueInteger.get(s.getEffectivePrecision()), // NUMERIC_PRECISION_RADIX
ValueInteger.get(10), // NUMERIC_SCALE
declaredScale, // START_VALUE
ValueBigint.get(s.getStartValue()), // MINIMUM_VALUE
ValueBigint.get(s.getMinValue()), // MAXIMUM_VALUE
ValueBigint.get(s.getMaxValue()), // INCREMENT
ValueBigint.get(s.getIncrement()), // CYCLE_OPTION
s.getCycle().isCycle() ? "YES" : "NO", // DECLARED_DATA_TYPE
dataTypeName, // DECLARED_NUMERIC_PRECISION
ValueInteger.get((int) dataType.getPrecision()), // DECLARED_NUMERIC_SCALE
declaredScale, // CURRENT_VALUE
ValueBigint.get(s.getCurrentValue()), // IS_GENERATED
ValueBoolean.get(s.getBelongsToTable()), // REMARKS
replaceNullWithEmpty(s.getComment()), // CACHE
ValueBigint.get(s.getCacheSize()), // ID
ValueInteger.get(s.getId()), // MIN_VALUE
ValueBigint.get(s.getMinValue()), // MAX_VALUE
ValueBigint.get(s.getMaxValue()), // IS_CYCLE
ValueBoolean.get(s.getCycle().isCycle()));
}
break;
}
case USERS:
{
for (RightOwner rightOwner : database.getAllUsersAndRoles()) {
if (rightOwner instanceof User) {
User u = (User) rightOwner;
if (admin || session.getUser() == u) {
add(session, rows, // NAME
identifier(u.getName()), // ADMIN
String.valueOf(u.isAdmin()), // REMARKS
replaceNullWithEmpty(u.getComment()), // ID
ValueInteger.get(u.getId()));
}
}
}
break;
}
case ROLES:
{
for (RightOwner rightOwner : database.getAllUsersAndRoles()) {
if (rightOwner instanceof Role) {
Role r = (Role) rightOwner;
if (admin || session.getUser().isRoleGranted(r)) {
add(session, rows, // NAME
identifier(r.getName()), // REMARKS
replaceNullWithEmpty(r.getComment()), // ID
ValueInteger.get(r.getId()));
}
}
}
break;
}
case RIGHTS:
{
if (admin) {
for (Right r : database.getAllRights()) {
Role role = r.getGrantedRole();
DbObject grantee = r.getGrantee();
String rightType = grantee.getType() == DbObject.USER ? "USER" : "ROLE";
if (role == null) {
DbObject object = r.getGrantedObject();
Schema schema = null;
Table table = null;
if (object != null) {
if (object instanceof Schema) {
schema = (Schema) object;
} else if (object instanceof Table) {
table = (Table) object;
schema = table.getSchema();
}
}
String tableName = (table != null) ? table.getName() : "";
String schemaName = (schema != null) ? schema.getName() : "";
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
add(session, rows, // GRANTEE
identifier(grantee.getName()), // GRANTEETYPE
rightType, // GRANTEDROLE
"", // RIGHTS
r.getRights(), // TABLE_SCHEMA
schemaName, // TABLE_NAME
tableName, // ID
ValueInteger.get(r.getId()));
} else {
add(session, rows, // GRANTEE
identifier(grantee.getName()), // GRANTEETYPE
rightType, // GRANTEDROLE
identifier(role.getName()), // RIGHTS
"", // TABLE_SCHEMA
"", // TABLE_NAME
"", // ID
ValueInteger.get(r.getId()));
}
}
}
break;
}
case FUNCTION_ALIASES:
for (Schema schema : database.getAllSchemas()) {
for (UserDefinedFunction userDefinedFunction : schema.getAllFunctionsAndAggregates()) {
if (userDefinedFunction instanceof FunctionAlias) {
FunctionAlias alias = (FunctionAlias) userDefinedFunction;
JavaMethod[] methods;
try {
methods = alias.getJavaMethods();
} catch (DbException e) {
continue;
}
for (FunctionAlias.JavaMethod method : methods) {
TypeInfo typeInfo = method.getDataType();
if (typeInfo == null) {
typeInfo = TypeInfo.TYPE_NULL;
}
add(session, rows, // ALIAS_CATALOG
catalog, // ALIAS_SCHEMA
alias.getSchema().getName(), // ALIAS_NAME
alias.getName(), // JAVA_CLASS
alias.getJavaClassName(), // JAVA_METHOD
alias.getJavaMethodName(), // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(typeInfo)), // TYPE_NAME
typeInfo.getDeclaredTypeName(), // COLUMN_COUNT
ValueInteger.get(method.getParameterCount()), // RETURNS_RESULT
ValueSmallint.get(typeInfo.getValueType() == Value.NULL ? (short) DatabaseMetaData.procedureNoResult : (short) DatabaseMetaData.procedureReturnsResult), // REMARKS
replaceNullWithEmpty(alias.getComment()), // ID
ValueInteger.get(alias.getId()), // SOURCE
alias.getSource());
}
} else {
add(session, rows, // ALIAS_CATALOG
catalog, // ALIAS_SCHEMA
database.getMainSchema().getName(), // ALIAS_NAME
userDefinedFunction.getName(), // JAVA_CLASS
userDefinedFunction.getJavaClassName(), // JAVA_METHOD
"", // DATA_TYPE
ValueInteger.get(Types.NULL), // TYPE_NAME
"NULL", // COLUMN_COUNT
ValueInteger.get(1), // RETURNS_RESULT
ValueSmallint.get((short) DatabaseMetaData.procedureReturnsResult), // REMARKS
replaceNullWithEmpty(userDefinedFunction.getComment()), // ID
ValueInteger.get(userDefinedFunction.getId()), // SOURCE
"");
}
}
}
break;
case FUNCTION_COLUMNS:
for (Schema schema : database.getAllSchemas()) {
for (UserDefinedFunction userDefinedFunction : schema.getAllFunctionsAndAggregates()) {
if (userDefinedFunction instanceof FunctionAlias) {
FunctionAlias alias = (FunctionAlias) userDefinedFunction;
JavaMethod[] methods;
try {
methods = alias.getJavaMethods();
} catch (DbException e) {
continue;
}
for (FunctionAlias.JavaMethod method : methods) {
// Add return column index 0
TypeInfo typeInfo = method.getDataType();
if (typeInfo != null && typeInfo.getValueType() != Value.NULL) {
DataType dt = DataType.getDataType(typeInfo.getValueType());
add(session, rows, // ALIAS_CATALOG
catalog, // ALIAS_SCHEMA
alias.getSchema().getName(), // ALIAS_NAME
alias.getName(), // JAVA_CLASS
alias.getJavaClassName(), // JAVA_METHOD
alias.getJavaMethodName(), // COLUMN_COUNT
ValueInteger.get(method.getParameterCount()), // POS
ValueInteger.get(0), // COLUMN_NAME
"P0", // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(typeInfo)), // TYPE_NAME
typeInfo.getDeclaredTypeName(), // PRECISION
ValueInteger.get(MathUtils.convertLongToInt(dt.defaultPrecision)), // SCALE
ValueSmallint.get(MathUtils.convertIntToShort(dt.defaultScale)), // RADIX
ValueSmallint.get((short) 10), // NULLABLE
ValueSmallint.get((short) DatabaseMetaData.columnNullableUnknown), // COLUMN_TYPE
ValueSmallint.get((short) DatabaseMetaData.procedureColumnReturn), // REMARKS
"", // COLUMN_DEFAULT
null);
}
Class<?>[] columnList = method.getColumnClasses();
for (int k = 0; k < columnList.length; k++) {
if (method.hasConnectionParam() && k == 0) {
continue;
}
Class<?> clazz = columnList[k];
TypeInfo columnTypeInfo = ValueToObjectConverter2.classToType(clazz);
DataType dt = DataType.getDataType(columnTypeInfo.getValueType());
add(session, rows, // ALIAS_CATALOG
catalog, // ALIAS_SCHEMA
alias.getSchema().getName(), // ALIAS_NAME
alias.getName(), // JAVA_CLASS
alias.getJavaClassName(), // JAVA_METHOD
alias.getJavaMethodName(), // COLUMN_COUNT
ValueInteger.get(method.getParameterCount()), // POS
ValueInteger.get(k + (method.hasConnectionParam() ? 0 : 1)), // COLUMN_NAME
"P" + (k + 1), // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(columnTypeInfo)), // TYPE_NAME
columnTypeInfo.getDeclaredTypeName(), // PRECISION
ValueInteger.get(MathUtils.convertLongToInt(dt.defaultPrecision)), // SCALE
ValueSmallint.get(MathUtils.convertIntToShort(dt.defaultScale)), // RADIX
ValueSmallint.get((short) 10), // NULLABLE
ValueSmallint.get(clazz.isPrimitive() ? (short) DatabaseMetaData.columnNoNulls : (short) DatabaseMetaData.columnNullable), // COLUMN_TYPE
ValueSmallint.get((short) DatabaseMetaData.procedureColumnIn), // REMARKS
"", // COLUMN_DEFAULT
null);
}
}
}
}
}
break;
case SCHEMATA:
{
String collation = database.getCompareMode().getName();
for (Schema schema : database.getAllSchemas()) {
add(session, rows, // CATALOG_NAME
catalog, // SCHEMA_NAME
schema.getName(), // SCHEMA_OWNER
identifier(schema.getOwner().getName()), // DEFAULT_CHARACTER_SET_NAME
CHARACTER_SET_NAME, // DEFAULT_COLLATION_NAME
collation, // IS_DEFAULT
ValueBoolean.get(schema.getId() == Constants.MAIN_SCHEMA_ID), // REMARKS
replaceNullWithEmpty(schema.getComment()), // ID
ValueInteger.get(schema.getId()));
}
break;
}
case TABLE_PRIVILEGES:
{
for (Right r : database.getAllRights()) {
DbObject object = r.getGrantedObject();
if (!(object instanceof Table)) {
continue;
}
Table table = (Table) object;
if (hideTable(table, session)) {
continue;
}
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
addPrivileges(session, rows, r.getGrantee(), catalog, table, null, r.getRightMask());
}
break;
}
case COLUMN_PRIVILEGES:
{
for (Right r : database.getAllRights()) {
DbObject object = r.getGrantedObject();
if (!(object instanceof Table)) {
continue;
}
Table table = (Table) object;
if (hideTable(table, session)) {
continue;
}
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
DbObject grantee = r.getGrantee();
int mask = r.getRightMask();
for (Column column : table.getColumns()) {
addPrivileges(session, rows, grantee, catalog, table, column.getName(), mask);
}
}
break;
}
case COLLATIONS:
{
for (Locale l : CompareMode.getCollationLocales(false)) {
add(session, rows, // KEY
CompareMode.getName(l), l.toString());
}
break;
}
case VIEWS:
{
for (Table table : getAllTables(session)) {
if (table.getTableType() != TableType.VIEW) {
continue;
}
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
TableView view = (TableView) table;
add(session, rows, // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // VIEW_DEFINITION
table.getCreateSQL(), // CHECK_OPTION
"NONE", // IS_UPDATABLE
"NO", // STATUS
view.isInvalid() ? "INVALID" : "VALID", // REMARKS
replaceNullWithEmpty(view.getComment()), // ID
ValueInteger.get(view.getId()));
}
break;
}
case IN_DOUBT:
{
ArrayList<InDoubtTransaction> prepared = database.getInDoubtTransactions();
if (prepared != null && admin) {
for (InDoubtTransaction prep : prepared) {
add(session, rows, // STATE
prep.getTransactionName(), prep.getStateDescription());
}
}
break;
}
case CROSS_REFERENCES:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
Constraint constraint = (Constraint) obj;
if (constraint.getConstraintType() != Constraint.Type.REFERENTIAL) {
continue;
}
ConstraintReferential ref = (ConstraintReferential) constraint;
IndexColumn[] cols = ref.getColumns();
IndexColumn[] refCols = ref.getRefColumns();
Table tab = ref.getTable();
Table refTab = ref.getRefTable();
String tableName = refTab.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
ValueSmallint update = ValueSmallint.get(getRefAction(ref.getUpdateAction()));
ValueSmallint delete = ValueSmallint.get(getRefAction(ref.getDeleteAction()));
for (int j = 0; j < cols.length; j++) {
add(session, rows, // PKTABLE_CATALOG
catalog, // PKTABLE_SCHEMA
refTab.getSchema().getName(), // PKTABLE_NAME
refTab.getName(), // PKCOLUMN_NAME
refCols[j].column.getName(), // FKTABLE_CATALOG
catalog, // FKTABLE_SCHEMA
tab.getSchema().getName(), // FKTABLE_NAME
tab.getName(), // FKCOLUMN_NAME
cols[j].column.getName(), // ORDINAL_POSITION
ValueSmallint.get((short) (j + 1)), // UPDATE_RULE
update, // DELETE_RULE
delete, // FK_NAME
ref.getName(), // PK_NAME
ref.getReferencedConstraint().getName(), // DEFERRABILITY
ValueSmallint.get((short) DatabaseMetaData.importedKeyNotDeferrable));
}
}
break;
}
case CONSTRAINTS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
Constraint constraint = (Constraint) obj;
Constraint.Type constraintType = constraint.getConstraintType();
String checkExpression = null;
IndexColumn[] indexColumns = null;
Table table = constraint.getTable();
if (hideTable(table, session)) {
continue;
}
Index index = constraint.getIndex();
String uniqueIndexName = null;
if (index != null) {
uniqueIndexName = index.getName();
}
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
if (constraintType == Constraint.Type.CHECK) {
checkExpression = ((ConstraintCheck) constraint).getExpression().getSQL(HasSQL.DEFAULT_SQL_FLAGS);
} else if (constraintType == Constraint.Type.UNIQUE || constraintType == Constraint.Type.PRIMARY_KEY) {
indexColumns = ((ConstraintUnique) constraint).getColumns();
} else if (constraintType == Constraint.Type.REFERENTIAL) {
indexColumns = ((ConstraintReferential) constraint).getColumns();
}
String columnList = null;
if (indexColumns != null) {
StringBuilder builder = new StringBuilder();
for (int i = 0, length = indexColumns.length; i < length; i++) {
if (i > 0) {
builder.append(',');
}
builder.append(indexColumns[i].column.getName());
}
columnList = builder.toString();
}
add(session, rows, // CONSTRAINT_CATALOG
catalog, // CONSTRAINT_SCHEMA
constraint.getSchema().getName(), // CONSTRAINT_NAME
constraint.getName(), // CONSTRAINT_TYPE
constraintType == Constraint.Type.PRIMARY_KEY ? constraintType.getSqlName() : constraintType.name(), // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // UNIQUE_INDEX_NAME
uniqueIndexName, // CHECK_EXPRESSION
checkExpression, // COLUMN_LIST
columnList, // REMARKS
replaceNullWithEmpty(constraint.getComment()), // SQL
constraint.getCreateSQL(), // ID
ValueInteger.get(constraint.getId()));
}
break;
}
case CONSTANTS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTANT)) {
Constant constant = (Constant) obj;
ValueExpression expr = constant.getValue();
add(session, rows, // CONSTANT_CATALOG
catalog, // CONSTANT_SCHEMA
constant.getSchema().getName(), // CONSTANT_NAME
constant.getName(), // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(expr.getType())), // REMARKS
replaceNullWithEmpty(constant.getComment()), // SQL
expr.getSQL(DEFAULT_SQL_FLAGS), // ID
ValueInteger.get(constant.getId()));
}
break;
}
case DOMAINS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.DOMAIN)) {
Domain domain = (Domain) obj;
Domain parentDomain = domain.getDomain();
TypeInfo typeInfo = domain.getDataType();
add(session, rows, // DOMAIN_CATALOG
catalog, // DOMAIN_SCHEMA
domain.getSchema().getName(), // DOMAIN_NAME
domain.getName(), // DOMAIN_DEFAULT
domain.getDefaultSQL(), // DOMAIN_ON_UPDATE
domain.getOnUpdateSQL(), // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(typeInfo)), // PRECISION
ValueInteger.get(MathUtils.convertLongToInt(typeInfo.getPrecision())), // SCALE
ValueInteger.get(typeInfo.getScale()), // TYPE_NAME
typeInfo.getDeclaredTypeName(), // PARENT_DOMAIN_CATALOG
parentDomain != null ? catalog : null, // PARENT_DOMAIN_SCHEMA
parentDomain != null ? parentDomain.getSchema().getName() : null, // PARENT_DOMAIN_NAME
parentDomain != null ? parentDomain.getName() : null, // SELECTIVITY INT
ValueInteger.get(Constants.SELECTIVITY_DEFAULT), // REMARKS
replaceNullWithEmpty(domain.getComment()), // SQL
domain.getCreateSQL(), // ID
ValueInteger.get(domain.getId()), // COLUMN_DEFAULT
domain.getDefaultSQL(), // IS_NULLABLE
"YES", // CHECK_CONSTRAINT
null);
}
break;
}
case TRIGGERS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.TRIGGER)) {
TriggerObject trigger = (TriggerObject) obj;
Table table = trigger.getTable();
add(session, rows, // TRIGGER_CATALOG
catalog, // TRIGGER_SCHEMA
trigger.getSchema().getName(), // TRIGGER_NAME
trigger.getName(), // TRIGGER_TYPE
trigger.getTypeNameList(new StringBuilder()).toString(), // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
table.getName(), // BEFORE
ValueBoolean.get(trigger.isBefore()), // JAVA_CLASS
trigger.getTriggerClassName(), // QUEUE_SIZE
ValueInteger.get(trigger.getQueueSize()), // NO_WAIT
ValueBoolean.get(trigger.isNoWait()), // REMARKS
replaceNullWithEmpty(trigger.getComment()), // SQL
trigger.getCreateSQL(), // ID
ValueInteger.get(trigger.getId()));
}
break;
}
case SESSIONS:
{
for (SessionLocal s : database.getSessions(false)) {
if (admin || s == session) {
NetworkConnectionInfo networkConnectionInfo = s.getNetworkConnectionInfo();
Command command = s.getCurrentCommand();
int blockingSessionId = s.getBlockingSessionId();
add(session, rows, // ID
ValueInteger.get(s.getId()), // USER_NAME
s.getUser().getName(), // SERVER
networkConnectionInfo == null ? null : networkConnectionInfo.getServer(), // CLIENT_ADDR
networkConnectionInfo == null ? null : networkConnectionInfo.getClient(), // CLIENT_INFO
networkConnectionInfo == null ? null : networkConnectionInfo.getClientInfo(), // SESSION_START
s.getSessionStart(), // ISOLATION_LEVEL
session.getIsolationLevel().getSQL(), // STATEMENT
command == null ? null : command.toString(), // STATEMENT_START
command == null ? null : s.getCommandStartOrEnd(), // CONTAINS_UNCOMMITTED
ValueBoolean.get(s.hasPendingTransaction()), // STATE
String.valueOf(s.getState()), // BLOCKER_ID
blockingSessionId == 0 ? null : ValueInteger.get(blockingSessionId), // SLEEP_SINCE
s.getState() == State.SLEEP ? s.getCommandStartOrEnd() : null);
}
}
break;
}
case LOCKS:
{
for (SessionLocal s : database.getSessions(false)) {
if (admin || s == session) {
for (Table table : s.getLocks()) {
add(session, rows, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
table.getName(), // SESSION_ID
ValueInteger.get(s.getId()), // LOCK_TYPE
table.isLockedExclusivelyBy(s) ? "WRITE" : "READ");
}
}
}
break;
}
case SESSION_STATE:
{
for (String name : session.getVariableNames()) {
Value v = session.getVariable(name);
StringBuilder builder = new StringBuilder().append("SET @").append(name).append(' ');
v.getSQL(builder, DEFAULT_SQL_FLAGS);
add(session, rows, // KEY
"@" + name, // SQL
builder.toString());
}
for (Table table : session.getLocalTempTables()) {
add(session, rows, // KEY
"TABLE " + table.getName(), // SQL
table.getCreateSQL());
}
String[] path = session.getSchemaSearchPath();
if (path != null && path.length > 0) {
StringBuilder builder = new StringBuilder("SET SCHEMA_SEARCH_PATH ");
for (int i = 0, l = path.length; i < l; i++) {
if (i > 0) {
builder.append(", ");
}
StringUtils.quoteIdentifier(builder, path[i]);
}
add(session, rows, // KEY
"SCHEMA_SEARCH_PATH", // SQL
builder.toString());
}
String schema = session.getCurrentSchemaName();
if (schema != null) {
add(session, rows, // KEY
"SCHEMA", // SQL
StringUtils.quoteIdentifier(new StringBuilder("SET SCHEMA "), schema).toString());
}
TimeZoneProvider currentTimeZone = session.currentTimeZone();
if (!currentTimeZone.equals(DateTimeUtils.getTimeZone())) {
add(session, rows, // KEY
"TIME ZONE", // SQL
StringUtils.quoteStringSQL(new StringBuilder("SET TIME ZONE "), currentTimeZone.getId()).toString());
}
break;
}
case QUERY_STATISTICS:
{
QueryStatisticsData control = database.getQueryStatisticsData();
if (control != null) {
for (QueryStatisticsData.QueryEntry entry : control.getQueries()) {
add(session, rows, // SQL_STATEMENT
entry.sqlStatement, // EXECUTION_COUNT
ValueInteger.get(entry.count), // MIN_EXECUTION_TIME
ValueDouble.get(entry.executionTimeMinNanos / 1_000_000d), // MAX_EXECUTION_TIME
ValueDouble.get(entry.executionTimeMaxNanos / 1_000_000d), // CUMULATIVE_EXECUTION_TIME
ValueDouble.get(entry.executionTimeCumulativeNanos / 1_000_000d), // AVERAGE_EXECUTION_TIME
ValueDouble.get(entry.executionTimeMeanNanos / 1_000_000d), // STD_DEV_EXECUTION_TIME
ValueDouble.get(entry.getExecutionTimeStandardDeviation() / 1_000_000d), // MIN_ROW_COUNT
ValueBigint.get(entry.rowCountMin), // MAX_ROW_COUNT
ValueBigint.get(entry.rowCountMax), // CUMULATIVE_ROW_COUNT
ValueBigint.get(entry.rowCountCumulative), // AVERAGE_ROW_COUNT
ValueDouble.get(entry.rowCountMean), // STD_DEV_ROW_COUNT
ValueDouble.get(entry.getRowCountStandardDeviation()));
}
}
break;
}
case SYNONYMS:
{
for (TableSynonym synonym : database.getAllSynonyms()) {
add(session, rows, // SYNONYM_CATALOG
catalog, // SYNONYM_SCHEMA
synonym.getSchema().getName(), // SYNONYM_NAME
synonym.getName(), // SYNONYM_FOR
synonym.getSynonymForName(), // SYNONYM_FOR_SCHEMA
synonym.getSynonymForSchema().getName(), // TYPE NAME
"SYNONYM", // STATUS
"VALID", // REMARKS
replaceNullWithEmpty(synonym.getComment()), // ID
ValueInteger.get(synonym.getId()));
}
break;
}
case TABLE_CONSTRAINTS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
Constraint constraint = (Constraint) obj;
Constraint.Type constraintType = constraint.getConstraintType();
if (constraintType == Constraint.Type.DOMAIN) {
continue;
}
Table table = constraint.getTable();
if (hideTable(table, session)) {
continue;
}
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
add(session, rows, // CONSTRAINT_CATALOG
catalog, // CONSTRAINT_SCHEMA
constraint.getSchema().getName(), // CONSTRAINT_NAME
constraint.getName(), // CONSTRAINT_TYPE
constraintType.getSqlName(), // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // IS_DEFERRABLE
"NO", // INITIALLY_DEFERRED
"NO", // REMARKS
replaceNullWithEmpty(constraint.getComment()), // SQL
constraint.getCreateSQL(), // ID
ValueInteger.get(constraint.getId()));
}
break;
}
case DOMAIN_CONSTRAINTS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
if (((Constraint) obj).getConstraintType() != Constraint.Type.DOMAIN) {
continue;
}
ConstraintDomain constraint = (ConstraintDomain) obj;
Domain domain = constraint.getDomain();
add(session, rows, // CONSTRAINT_CATALOG
catalog, // CONSTRAINT_SCHEMA
constraint.getSchema().getName(), // CONSTRAINT_NAME
constraint.getName(), // DOMAIN_CATALOG
catalog, // DOMAIN_SCHEMA
domain.getSchema().getName(), // DOMAIN_NAME
domain.getName(), // IS_DEFERRABLE
"NO", // INITIALLY_DEFERRED
"NO", // REMARKS
replaceNullWithEmpty(constraint.getComment()), // SQL
constraint.getCreateSQL(), // ID
ValueInteger.get(constraint.getId()));
}
break;
}
case KEY_COLUMN_USAGE:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
Constraint constraint = (Constraint) obj;
Constraint.Type constraintType = constraint.getConstraintType();
IndexColumn[] indexColumns = null;
if (constraintType == Constraint.Type.UNIQUE || constraintType == Constraint.Type.PRIMARY_KEY) {
indexColumns = ((ConstraintUnique) constraint).getColumns();
} else if (constraintType == Constraint.Type.REFERENTIAL) {
indexColumns = ((ConstraintReferential) constraint).getColumns();
}
if (indexColumns == null) {
continue;
}
Table table = constraint.getTable();
if (hideTable(table, session)) {
continue;
}
String tableName = table.getName();
if (!checkIndex(session, tableName, indexFrom, indexTo)) {
continue;
}
ConstraintUnique referenced;
if (constraintType == Constraint.Type.REFERENTIAL) {
referenced = ((ConstraintReferential) constraint).getReferencedConstraint();
} else {
referenced = null;
}
Index index = constraint.getIndex();
for (int i = 0; i < indexColumns.length; i++) {
IndexColumn indexColumn = indexColumns[i];
ValueInteger ordinalPosition = ValueInteger.get(i + 1);
ValueInteger positionInUniqueConstraint = null;
if (referenced != null) {
Column c = ((ConstraintReferential) constraint).getRefColumns()[i].column;
IndexColumn[] refColumns = referenced.getColumns();
for (int j = 0; j < refColumns.length; j++) {
if (refColumns[j].column.equals(c)) {
positionInUniqueConstraint = ValueInteger.get(j + 1);
break;
}
}
}
add(session, rows, // CONSTRAINT_CATALOG
catalog, // CONSTRAINT_SCHEMA
constraint.getSchema().getName(), // CONSTRAINT_NAME
constraint.getName(), // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // COLUMN_NAME
indexColumn.columnName, // ORDINAL_POSITION
ordinalPosition, // POSITION_IN_UNIQUE_CONSTRAINT
positionInUniqueConstraint, // INDEX_CATALOG
index != null ? catalog : null, // INDEX_SCHEMA
index != null ? index.getSchema().getName() : null, // INDEX_NAME
index != null ? index.getName() : null);
}
}
break;
}
case REFERENTIAL_CONSTRAINTS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
if (((Constraint) obj).getConstraintType() != Constraint.Type.REFERENTIAL) {
continue;
}
ConstraintReferential constraint = (ConstraintReferential) obj;
Table table = constraint.getTable();
if (hideTable(table, session)) {
continue;
}
ConstraintUnique unique = constraint.getReferencedConstraint();
add(session, rows, // CONSTRAINT_CATALOG
catalog, // CONSTRAINT_SCHEMA
constraint.getSchema().getName(), // CONSTRAINT_NAME
constraint.getName(), // UNIQUE_CONSTRAINT_CATALOG
catalog, // UNIQUE_CONSTRAINT_SCHEMA
unique.getSchema().getName(), // UNIQUE_CONSTRAINT_NAME
unique.getName(), // MATCH_OPTION
"NONE", // UPDATE_RULE
constraint.getUpdateAction().getSqlName(), // DELETE_RULE
constraint.getDeleteAction().getSqlName());
}
break;
}
case CHECK_CONSTRAINTS:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
Constraint constraint = (Constraint) obj;
Type constraintType = constraint.getConstraintType();
if (constraintType == Constraint.Type.CHECK) {
ConstraintCheck check = (ConstraintCheck) obj;
Table table = check.getTable();
if (hideTable(table, session)) {
continue;
}
} else if (constraintType != Constraint.Type.DOMAIN) {
continue;
}
add(session, rows, // CONSTRAINT_CATALOG
catalog, // CONSTRAINT_SCHEMA
obj.getSchema().getName(), // CONSTRAINT_NAME
obj.getName(), // CHECK_CLAUSE
constraint.getExpression().getSQL(DEFAULT_SQL_FLAGS, Expression.WITHOUT_PARENTHESES));
}
break;
}
case CONSTRAINT_COLUMN_USAGE:
{
for (SchemaObject obj : getAllSchemaObjects(DbObject.CONSTRAINT)) {
Constraint constraint = (Constraint) obj;
switch(constraint.getConstraintType()) {
case CHECK:
case DOMAIN:
{
HashSet<Column> columns = new HashSet<>();
constraint.getExpression().isEverything(ExpressionVisitor.getColumnsVisitor(columns, null));
for (Column column : columns) {
Table table = column.getTable();
if (checkIndex(session, table.getName(), indexFrom, indexTo) && !hideTable(table, session)) {
addConstraintColumnUsage(session, rows, catalog, constraint, column);
}
}
break;
}
case REFERENTIAL:
{
Table table = constraint.getRefTable();
if (checkIndex(session, table.getName(), indexFrom, indexTo) && !hideTable(table, session)) {
for (Column column : constraint.getReferencedColumns(table)) {
addConstraintColumnUsage(session, rows, catalog, constraint, column);
}
}
}
// $FALL-THROUGH$
case PRIMARY_KEY:
case UNIQUE:
{
Table table = constraint.getTable();
if (checkIndex(session, table.getName(), indexFrom, indexTo) && !hideTable(table, session)) {
for (Column column : constraint.getReferencedColumns(table)) {
addConstraintColumnUsage(session, rows, catalog, constraint, column);
}
}
}
}
}
break;
}
default:
throw DbException.getInternalError("type=" + type);
}
return rows;
}
use of org.h2.value.ValueInteger in project h2database by h2database.
the class InformationSchemaTable method keyColumnUsage.
private void keyColumnUsage(SessionLocal session, ArrayList<Row> rows, String catalog, Constraint constraint, Constraint.Type constraintType, IndexColumn[] indexColumns, Table table, String tableName) {
ConstraintUnique referenced;
if (constraintType == Constraint.Type.REFERENTIAL) {
referenced = ((ConstraintReferential) constraint).getReferencedConstraint();
} else {
referenced = null;
}
for (int i = 0; i < indexColumns.length; i++) {
IndexColumn indexColumn = indexColumns[i];
ValueInteger ordinalPosition = ValueInteger.get(i + 1);
ValueInteger positionInUniqueConstraint = null;
if (referenced != null) {
Column c = ((ConstraintReferential) constraint).getRefColumns()[i].column;
IndexColumn[] refColumns = referenced.getColumns();
for (int j = 0; j < refColumns.length; j++) {
if (refColumns[j].column.equals(c)) {
positionInUniqueConstraint = ValueInteger.get(j + 1);
break;
}
}
}
add(session, rows, // CONSTRAINT_CATALOG
catalog, // CONSTRAINT_SCHEMA
constraint.getSchema().getName(), // CONSTRAINT_NAME
constraint.getName(), // TABLE_CATALOG
catalog, // TABLE_SCHEMA
table.getSchema().getName(), // TABLE_NAME
tableName, // COLUMN_NAME
indexColumn.columnName, // ORDINAL_POSITION
ordinalPosition, // POSITION_IN_UNIQUE_CONSTRAINT
positionInUniqueConstraint);
}
}
use of org.h2.value.ValueInteger in project SpringStudy by myounghaklee.
the class DatabaseMetaLocal method getPseudoColumnsAdd.
private void getPseudoColumnsAdd(SimpleResult result, Value catalogValue, Value schemaValue, Value tableName, CompareLike columnLike, Column c) {
String name = c.getName();
if (columnLike != null && !columnLike.test(name)) {
return;
}
TypeInfo type = c.getType();
ValueInteger precision = ValueInteger.get(MathUtils.convertLongToInt(type.getPrecision()));
result.addRow(// TABLE_CAT
catalogValue, // TABLE_SCHEM
schemaValue, // TABLE_NAME
tableName, // COLUMN_NAME
getString(name), // DATA_TYPE
ValueInteger.get(DataType.convertTypeToSQLType(type)), // COLUMN_SIZE
precision, // DECIMAL_DIGITS
ValueInteger.get(type.getScale()), // NUM_PREC_RADIX
getRadix(type.getValueType(), false), // COLUMN_USAGE
NO_USAGE_RESTRICTIONS, // REMARKS
getString(c.getComment()), // CHAR_OCTET_LENGTH
precision, // IS_NULLABLE
c.isNullable() ? YES : NO);
}
Aggregations