blob: c9cf9bd225e55517a0fb80f23164f6ac86368c16 [file] [log] [blame]
/*
* 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.apache.ignite.jdbc.thin;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.DriverManager;
import java.sql.ParameterMetaData;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
import org.apache.ignite.IgniteCache;
import org.apache.ignite.cache.QueryEntity;
import org.apache.ignite.cache.QueryIndex;
import org.apache.ignite.cache.affinity.AffinityKey;
import org.apache.ignite.cache.query.annotations.QuerySqlField;
import org.apache.ignite.configuration.CacheConfiguration;
import org.apache.ignite.configuration.IgniteConfiguration;
import org.apache.ignite.configuration.SqlConfiguration;
import org.apache.ignite.internal.IgniteVersionUtils;
import org.apache.ignite.internal.jdbc2.JdbcUtils;
import org.apache.ignite.internal.processors.query.QueryEntityEx;
import org.apache.ignite.internal.util.typedef.F;
import org.apache.ignite.testframework.GridTestUtils;
import org.junit.Assert;
import org.junit.Test;
import static java.sql.Types.DATE;
import static java.sql.Types.DECIMAL;
import static java.sql.Types.INTEGER;
import static java.sql.Types.OTHER;
import static java.sql.Types.VARCHAR;
import static org.apache.ignite.cache.CacheMode.PARTITIONED;
import static org.apache.ignite.cache.CacheWriteSynchronizationMode.FULL_SYNC;
import static org.apache.ignite.internal.processors.query.QueryUtils.DFLT_SCHEMA;
import static org.apache.ignite.internal.processors.query.QueryUtils.KEY_FIELD_NAME;
import static org.apache.ignite.internal.processors.query.QueryUtils.SCHEMA_SYS;
import static org.apache.ignite.internal.processors.query.QueryUtils.VAL_FIELD_NAME;
import static org.apache.ignite.internal.util.lang.GridFunc.asMap;
/**
* Metadata tests.
*/
public class JdbcThinMetadataSelfTest extends JdbcThinAbstractSelfTest {
/** URL. */
private static final String URL = "jdbc:ignite:thin://127.0.0.1/";
/** URL with partition awareness enabled. */
public static final String URL_PARTITION_AWARENESS =
"jdbc:ignite:thin://127.0.0.1:10800..10801?partitionAwareness=true";
/** {@inheritDoc} */
@Override protected IgniteConfiguration getConfiguration(String igniteInstanceName) throws Exception {
return super.getConfiguration(igniteInstanceName)
.setSqlConfiguration(new SqlConfiguration()
.setSqlSchemas("PREDEFINED_SCHEMAS_1", "PREDEFINED_SCHEMAS_2"));
}
/**
* @param qryEntity Query entity.
* @return Cache configuration.
*/
protected CacheConfiguration cacheConfiguration(QueryEntity qryEntity) {
CacheConfiguration<?, ?> cache = defaultCacheConfiguration();
cache.setCacheMode(PARTITIONED);
cache.setBackups(1);
cache.setWriteSynchronizationMode(FULL_SYNC);
cache.setQueryEntities(Collections.singletonList(qryEntity));
return cache;
}
/** {@inheritDoc} */
@Override protected void beforeTestsStarted() throws Exception {
super.beforeTestsStarted();
startGridsMultiThreaded(3);
Map<String, Integer> orgPrecision = new HashMap<>();
orgPrecision.put("name", 42);
IgniteCache<String, Organization> orgCache = jcache(grid(0),
cacheConfiguration(new QueryEntity(String.class.getName(), Organization.class.getName())
.addQueryField("id", Integer.class.getName(), null)
.addQueryField("name", String.class.getName(), null)
.setFieldsPrecision(orgPrecision)
.setIndexes(Arrays.asList(
new QueryIndex("id"),
new QueryIndex("name", false, "org_name_index")
))), "org");
assert orgCache != null;
orgCache.put("o1", new Organization(1, "A"));
orgCache.put("o2", new Organization(2, "B"));
LinkedHashMap<String, Boolean> persFields = new LinkedHashMap<>();
persFields.put("name", true);
persFields.put("age", false);
IgniteCache<AffinityKey, Person> personCache = jcache(grid(0), cacheConfiguration(
new QueryEntityEx(
new QueryEntity(AffinityKey.class.getName(), Person.class.getName())
.addQueryField("name", String.class.getName(), null)
.addQueryField("age", Integer.class.getName(), null)
.addQueryField("orgId", Integer.class.getName(), null)
.setIndexes(Arrays.asList(
new QueryIndex("orgId"),
new QueryIndex().setFields(persFields))))
.setNotNullFields(new HashSet<>(Arrays.asList("age", "name")))
), "pers");
assert personCache != null;
personCache.put(new AffinityKey<>("p1", "o1"), new Person("John White", 25, 1));
personCache.put(new AffinityKey<>("p2", "o1"), new Person("Joe Black", 35, 1));
personCache.put(new AffinityKey<>("p3", "o2"), new Person("Mike Green", 40, 2));
jcache(grid(0),
defaultCacheConfiguration().setIndexedTypes(Integer.class, Department.class),
"dep");
try (Connection conn = DriverManager.getConnection(URL)) {
Statement stmt = conn.createStatement();
stmt.execute("CREATE TABLE TEST (ID INT, NAME VARCHAR(50) default 'default name', " +
"age int default 21, VAL VARCHAR(50), PRIMARY KEY (ID, NAME))");
stmt.execute("CREATE TABLE \"Quoted\" (\"Id\" INT primary key, \"Name\" VARCHAR(50)) WITH WRAP_KEY");
stmt.execute("CREATE INDEX \"MyTestIndex quoted\" on \"Quoted\" (\"Id\" DESC)");
stmt.execute("CREATE INDEX IDX ON TEST (ID ASC)");
stmt.execute("CREATE TABLE TEST_DECIMAL_COLUMN (ID INT primary key, DEC_COL DECIMAL(8, 3))");
stmt.execute("CREATE TABLE TEST_DECIMAL_COLUMN_PRECISION (ID INT primary key, DEC_COL DECIMAL(8))");
stmt.execute("CREATE TABLE TEST_DECIMAL_DATE_COLUMN_META (ID INT primary key, DEC_COL DECIMAL(8), DATE_COL DATE)");
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testResultSetMetaData() throws Exception {
Connection conn = DriverManager.getConnection(URL);
conn.setSchema("\"pers\"");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(
"select p.name, o.id as orgId from \"pers\".Person p, \"org\".Organization o where p.orgId = o.id");
assert rs != null;
ResultSetMetaData meta = rs.getMetaData();
assert meta != null;
assert meta.getColumnCount() == 2;
assert "Person".equalsIgnoreCase(meta.getTableName(1));
assert "name".equalsIgnoreCase(meta.getColumnName(1));
assert "name".equalsIgnoreCase(meta.getColumnLabel(1));
assert meta.getColumnType(1) == VARCHAR;
assert "VARCHAR".equals(meta.getColumnTypeName(1));
assert "java.lang.String".equals(meta.getColumnClassName(1));
assert "Organization".equalsIgnoreCase(meta.getTableName(2));
assert "orgId".equalsIgnoreCase(meta.getColumnName(2));
assert "orgId".equalsIgnoreCase(meta.getColumnLabel(2));
assert meta.getColumnType(2) == INTEGER;
assert "INTEGER".equals(meta.getColumnTypeName(2));
assert "java.lang.Integer".equals(meta.getColumnClassName(2));
}
/**
* Ensure metadata returned for cache without explicit query entities: <ul>
* <li>create a cache with indexed types and without explicit query entities</li>
* <li>request metadata for columns from the cache</li>
* <li>verify returned result</li>
* </ul>
*
* @throws SQLException
*/
@Test
public void testMetadataPresentedForAutogeneratedColumns() throws SQLException {
final String cacheName = "testCache";
IgniteCache<?, ?> cache = grid(0).createCache(
new CacheConfiguration<>(cacheName).setIndexedTypes(Integer.class, String.class)
);
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getColumns(null, cacheName, null, null);
assertTrue(rs.next());
assertEquals(cacheName, rs.getString(MetadataColumn.TABLE_SCHEMA.columnName()));
assertEquals(KEY_FIELD_NAME, rs.getString(MetadataColumn.COLUMN_NAME.columnName()));
assertTrue(rs.next());
assertEquals(cacheName, rs.getString(MetadataColumn.TABLE_SCHEMA.columnName()));
assertEquals(VAL_FIELD_NAME, rs.getString(MetadataColumn.COLUMN_NAME.columnName()));
assertFalse(rs.next());
}
finally {
cache.destroy();
}
}
/**
* Ensure metadata returned for cache with explicit query entities has no duplicate columns: <ul>
* <li>create a cache with indexed types and explicit query entity</li>
* <li>request metadata for columns from the cache</li>
* <li>verify returned result</li>
* </ul>
*
* @throws SQLException
*/
@Test
public void testMetadataNotDublicatedIfFieldsSetExplicitly() throws SQLException {
final String cacheName = "testCache";
IgniteCache<?, ?> cache = grid(0).createCache(
new CacheConfiguration<>(cacheName)
.setQueryEntities(Collections.singleton(
new QueryEntity()
.setKeyType(Integer.class.getName())
.setKeyFieldName("my_key")
.setValueType(String.class.getName())
.setFields(new LinkedHashMap<>(asMap("my_key", Integer.class.getName())))
))
.setIndexedTypes(Integer.class, String.class)
);
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getColumns(null, cacheName, null, null);
assertTrue(rs.next());
assertEquals(cacheName, rs.getString(MetadataColumn.TABLE_SCHEMA.columnName()));
assertEquals("MY_KEY", rs.getString(MetadataColumn.COLUMN_NAME.columnName()));
assertFalse(rs.next());
}
finally {
cache.destroy();
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testDecimalAndDateTypeMetaData() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery(
"select t.dec_col, t.date_col from TEST_DECIMAL_DATE_COLUMN_META as t");
assert rs != null;
ResultSetMetaData meta = rs.getMetaData();
assert meta != null;
assert meta.getColumnCount() == 2;
assert "TEST_DECIMAL_DATE_COLUMN_META".equalsIgnoreCase(meta.getTableName(1));
assert "DEC_COL".equalsIgnoreCase(meta.getColumnName(1));
assert "DEC_COL".equalsIgnoreCase(meta.getColumnLabel(1));
assert meta.getColumnType(1) == DECIMAL;
assert "DECIMAL".equals(meta.getColumnTypeName(1));
assert "java.math.BigDecimal".equals(meta.getColumnClassName(1));
assert "TEST_DECIMAL_DATE_COLUMN_META".equalsIgnoreCase(meta.getTableName(2));
assert "DATE_COL".equalsIgnoreCase(meta.getColumnName(2));
assert "DATE_COL".equalsIgnoreCase(meta.getColumnLabel(2));
assert meta.getColumnType(2) == DATE;
assert "DATE".equals(meta.getColumnTypeName(2));
assert "java.sql.Date".equals(meta.getColumnClassName(2));
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetTableTypes() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getTableTypes();
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
assertTrue(rs.next());
assertEquals("VIEW", rs.getString("TABLE_TYPE"));
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetTables() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getTables(null, "pers", "%", new String[]{"TABLE"});
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
assertEquals(JdbcUtils.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("PERSON", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
rs = meta.getTables(null, "org", "%", new String[]{"TABLE"});
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
assertEquals(JdbcUtils.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("ORGANIZATION", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
rs = meta.getTables(null, "pers", "%", null);
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
assertEquals(JdbcUtils.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("PERSON", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
rs = meta.getTables(null, "org", "%", null);
assertNotNull(rs);
assertTrue(rs.next());
assertEquals("TABLE", rs.getString("TABLE_TYPE"));
assertEquals(JdbcUtils.CATALOG_NAME, rs.getString("TABLE_CAT"));
assertEquals("ORGANIZATION", rs.getString("TABLE_NAME"));
assertFalse(rs.next());
rs = meta.getTables(null, "PUBLIC", "", new String[]{"WRONG"});
assertFalse(rs.next());
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetAllTables() throws Exception {
testGetTables(
new String[] {"TABLE"},
new HashSet<>(Arrays.asList(
"org.ORGANIZATION",
"pers.PERSON",
"dep.DEPARTMENT",
"PUBLIC.TEST",
"PUBLIC.Quoted",
"PUBLIC.TEST_DECIMAL_COLUMN",
"PUBLIC.TEST_DECIMAL_COLUMN_PRECISION",
"PUBLIC.TEST_DECIMAL_DATE_COLUMN_META"))
);
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetAllView() throws Exception {
testGetTables(
new String[] {"VIEW"},
new TreeSet<>(Arrays.asList(
"SYS.METRICS",
"SYS.SERVICES",
"SYS.CACHE_GROUPS",
"SYS.CACHES",
"SYS.TASKS",
"SYS.JOBS",
"SYS.SQL_QUERIES_HISTORY",
"SYS.NODES",
"SYS.SCHEMAS",
"SYS.NODE_METRICS",
"SYS.BASELINE_NODES",
"SYS.BASELINE_NODE_ATTRIBUTES",
"SYS.INDEXES",
"SYS.LOCAL_CACHE_GROUPS_IO",
"SYS.SQL_QUERIES",
"SYS.SCAN_QUERIES",
"SYS.NODE_ATTRIBUTES",
"SYS.TABLES",
"SYS.CLIENT_CONNECTIONS",
"SYS.TRANSACTIONS",
"SYS.VIEWS",
"SYS.TABLE_COLUMNS",
"SYS.VIEW_COLUMNS",
"SYS.CONTINUOUS_QUERIES",
"SYS.STRIPED_THREADPOOL_QUEUE",
"SYS.DATASTREAM_THREADPOOL_QUEUE",
"SYS.CACHE_GROUP_PAGE_LISTS",
"SYS.DATA_REGION_PAGE_LISTS",
"SYS.PARTITION_STATES",
"SYS.BINARY_METADATA",
"SYS.DISTRIBUTED_METASTORAGE",
"SYS.DS_QUEUES",
"SYS.DS_SETS",
"SYS.DS_ATOMICSEQUENCES",
"SYS.DS_ATOMICLONGS",
"SYS.DS_ATOMICREFERENCES",
"SYS.DS_ATOMICSTAMPED",
"SYS.DS_COUNTDOWNLATCHES",
"SYS.DS_SEMAPHORES",
"SYS.DS_REENTRANTLOCKS",
"SYS.STATISTICS_LOCAL_DATA",
"SYS.STATISTICS_GLOBAL_DATA",
"SYS.STATISTICS_PARTITION_DATA",
"SYS.STATISTICS_CONFIGURATION"
))
);
}
/**
* @throws Exception If failed.
*/
private void testGetTables(String[] tblTypes, Set<String> expTbls) throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getTables(null, null, null, tblTypes);
Set<String> actualTbls = new TreeSet<>();
while (rs.next()) {
actualTbls.add(rs.getString("TABLE_SCHEM") + '.'
+ rs.getString("TABLE_NAME"));
}
assert expTbls.equals(actualTbls) : "expectedTbls=" + expTbls +
", actualTbls" + actualTbls;
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetColumns() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
conn.setSchema("pers");
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getColumns(null, "pers", "PERSON", "%");
ResultSetMetaData rsMeta = rs.getMetaData();
assert rsMeta.getColumnCount() == 24 : "Invalid columns count: " + rsMeta.getColumnCount();
assert rs != null;
Collection<String> names = new ArrayList<>(2);
names.add("NAME");
names.add("AGE");
names.add("ORGID");
int cnt = 0;
while (rs.next()) {
String name = rs.getString("COLUMN_NAME");
assert names.remove(name) : "Unexpected column name " + name;
if ("NAME".equals(name)) {
assert rs.getInt("DATA_TYPE") == VARCHAR;
assert "VARCHAR".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 0;
assert rs.getInt(11) == 0; // nullable column by index
assert rs.getString("IS_NULLABLE").equals("NO");
}
else if ("ORGID".equals(name)) {
assert rs.getInt("DATA_TYPE") == INTEGER;
assert "INTEGER".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 1;
assert rs.getInt(11) == 1; // nullable column by index
assert rs.getString("IS_NULLABLE").equals("YES");
}
else if ("AGE".equals(name)) {
assert rs.getInt("DATA_TYPE") == INTEGER;
assert "INTEGER".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 0;
assert rs.getInt(11) == 0; // nullable column by index
assert rs.getString("IS_NULLABLE").equals("NO");
}
else if ("_KEY".equals(name)) {
assert rs.getInt("DATA_TYPE") == OTHER;
assert "OTHER".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 0;
assert rs.getInt(11) == 0; // nullable column by index
assert rs.getString("IS_NULLABLE").equals("NO");
}
else if ("_VAL".equals(name)) {
assert rs.getInt("DATA_TYPE") == OTHER;
assert "OTHER".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 0;
assert rs.getInt(11) == 0; // nullable column by index
assert rs.getString("IS_NULLABLE").equals("NO");
}
cnt++;
}
assert names.isEmpty();
assert cnt == 3;
rs = meta.getColumns(null, "org", "ORGANIZATION", "%");
assert rs != null;
names.add("ID");
names.add("NAME");
cnt = 0;
while (rs.next()) {
String name = rs.getString("COLUMN_NAME");
assert names.remove(name);
if ("id".equals(name)) {
assert rs.getInt("DATA_TYPE") == INTEGER;
assert "INTEGER".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 0;
}
else if ("name".equals(name)) {
assert rs.getInt("DATA_TYPE") == VARCHAR;
assert "VARCHAR".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 1;
}
if ("_KEY".equals(name)) {
assert rs.getInt("DATA_TYPE") == VARCHAR;
assert "VARCHAR".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 0;
}
if ("_VAL".equals(name)) {
assert rs.getInt("DATA_TYPE") == OTHER;
assert "OTHER".equals(rs.getString("TYPE_NAME"));
assert rs.getInt("NULLABLE") == 0;
}
cnt++;
}
assert names.isEmpty();
assert cnt == 2;
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetAllColumns() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getColumns(null, null, null, null);
Set<String> expectedCols = new TreeSet<>(Arrays.asList(
"PUBLIC.Quoted.Id.null",
"PUBLIC.Quoted.Name.null.50",
"PUBLIC.TEST.ID.null",
"PUBLIC.TEST.NAME.'default name'.50",
"PUBLIC.TEST.AGE.21",
"PUBLIC.TEST.VAL.null.50",
"PUBLIC.TEST_DECIMAL_COLUMN.ID.null",
"PUBLIC.TEST_DECIMAL_COLUMN.DEC_COL.null.8.3",
"PUBLIC.TEST_DECIMAL_COLUMN_PRECISION.ID.null",
"PUBLIC.TEST_DECIMAL_COLUMN_PRECISION.DEC_COL.null.8",
"PUBLIC.TEST_DECIMAL_DATE_COLUMN_META.ID.null",
"PUBLIC.TEST_DECIMAL_DATE_COLUMN_META.DEC_COL.null.8",
"PUBLIC.TEST_DECIMAL_DATE_COLUMN_META.DATE_COL.null",
"dep.DEPARTMENT.ID.null",
"dep.DEPARTMENT.NAME.null.43",
"org.ORGANIZATION.ID.null",
"org.ORGANIZATION.NAME.null.42",
"pers.PERSON.NAME.null",
"pers.PERSON.AGE.null",
"pers.PERSON.ORGID.null"
));
Set<String> actualUserCols = new HashSet<>(expectedCols.size());
Set<String> actualSystemCols = new HashSet<>();
while (rs.next()) {
int precision = rs.getInt("COLUMN_SIZE");
int scale = rs.getInt("DECIMAL_DIGITS");
String schemaName = rs.getString("TABLE_SCHEM");
String colDefinition = schemaName + '.'
+ rs.getString("TABLE_NAME") + "."
+ rs.getString("COLUMN_NAME") + "."
+ rs.getString("COLUMN_DEF")
+ (precision == 0 ? "" : ("." + precision))
+ (scale == 0 ? "" : ("." + scale));
if (!schemaName.equals(SCHEMA_SYS))
actualUserCols.add(colDefinition);
else
actualSystemCols.add(colDefinition);
}
Assert.assertEquals(expectedCols, actualUserCols);
expectedCols = new TreeSet<>(Arrays.asList(
"SYS.BASELINE_NODES.CONSISTENT_ID.null.2147483647",
"SYS.BASELINE_NODES.ONLINE.null.1",
"SYS.BASELINE_NODE_ATTRIBUTES.NODE_CONSISTENT_ID.null.2147483647",
"SYS.BASELINE_NODE_ATTRIBUTES.NAME.null.2147483647",
"SYS.BASELINE_NODE_ATTRIBUTES.VALUE.null.2147483647",
"SYS.CACHES.CACHE_GROUP_ID.null.10",
"SYS.CACHES.CACHE_GROUP_NAME.null.2147483647",
"SYS.CACHES.CACHE_ID.null.10",
"SYS.CACHES.CACHE_NAME.null.2147483647",
"SYS.CACHES.CACHE_TYPE.null.2147483647",
"SYS.CACHES.CACHE_MODE.null.2147483647",
"SYS.CACHES.ATOMICITY_MODE.null.2147483647",
"SYS.CACHES.IS_ONHEAP_CACHE_ENABLED.null.1",
"SYS.CACHES.IS_COPY_ON_READ.null.1",
"SYS.CACHES.IS_LOAD_PREVIOUS_VALUE.null.1",
"SYS.CACHES.IS_READ_FROM_BACKUP.null.1",
"SYS.CACHES.PARTITION_LOSS_POLICY.null.2147483647",
"SYS.CACHES.NODE_FILTER.null.2147483647",
"SYS.CACHES.TOPOLOGY_VALIDATOR.null.2147483647",
"SYS.CACHES.IS_EAGER_TTL.null.1",
"SYS.CACHES.WRITE_SYNCHRONIZATION_MODE.null.2147483647",
"SYS.CACHES.IS_INVALIDATE.null.1",
"SYS.CACHES.IS_EVENTS_DISABLED.null.1",
"SYS.CACHES.IS_STATISTICS_ENABLED.null.1",
"SYS.CACHES.IS_MANAGEMENT_ENABLED.null.1",
"SYS.CACHES.BACKUPS.null.10",
"SYS.CACHES.AFFINITY.null.2147483647",
"SYS.CACHES.AFFINITY_MAPPER.null.2147483647",
"SYS.CACHES.REBALANCE_MODE.null.2147483647",
"SYS.CACHES.REBALANCE_BATCH_SIZE.null.10",
"SYS.CACHES.REBALANCE_TIMEOUT.null.19",
"SYS.CACHES.REBALANCE_DELAY.null.19",
"SYS.CACHES.REBALANCE_THROTTLE.null.19",
"SYS.CACHES.REBALANCE_BATCHES_PREFETCH_COUNT.null.19",
"SYS.CACHES.REBALANCE_ORDER.null.10",
"SYS.CACHES.EVICTION_FILTER.null.2147483647",
"SYS.CACHES.EVICTION_POLICY_FACTORY.null.2147483647",
"SYS.CACHES.CONFLICT_RESOLVER.null.2147483647",
"SYS.CACHES.IS_NEAR_CACHE_ENABLED.null.1",
"SYS.CACHES.NEAR_CACHE_EVICTION_POLICY_FACTORY.null.2147483647",
"SYS.CACHES.NEAR_CACHE_START_SIZE.null.10",
"SYS.CACHES.DEFAULT_LOCK_TIMEOUT.null.19",
"SYS.CACHES.INTERCEPTOR.null.2147483647",
"SYS.CACHES.CACHE_STORE_FACTORY.null.2147483647",
"SYS.CACHES.IS_STORE_KEEP_BINARY.null.1",
"SYS.CACHES.IS_READ_THROUGH.null.1",
"SYS.CACHES.IS_WRITE_THROUGH.null.1",
"SYS.CACHES.IS_WRITE_BEHIND_ENABLED.null.1",
"SYS.CACHES.WRITE_BEHIND_COALESCING.null.1",
"SYS.CACHES.WRITE_BEHIND_FLUSH_SIZE.null.10",
"SYS.CACHES.WRITE_BEHIND_FLUSH_FREQUENCY.null.19",
"SYS.CACHES.WRITE_BEHIND_FLUSH_THREAD_COUNT.null.10",
"SYS.CACHES.WRITE_BEHIND_BATCH_SIZE.null.10",
"SYS.CACHES.MAX_CONCURRENT_ASYNC_OPERATIONS.null.10",
"SYS.CACHES.CACHE_LOADER_FACTORY.null.2147483647",
"SYS.CACHES.CACHE_WRITER_FACTORY.null.2147483647",
"SYS.CACHES.EXPIRY_POLICY_FACTORY.null.2147483647",
"SYS.CACHES.IS_SQL_ESCAPE_ALL.null.1",
"SYS.CACHES.IS_ENCRYPTION_ENABLED.null.1",
"SYS.CACHES.SQL_SCHEMA.null.2147483647",
"SYS.CACHES.SQL_INDEX_MAX_INLINE_SIZE.null.10",
"SYS.CACHES.IS_SQL_ONHEAP_CACHE_ENABLED.null.1",
"SYS.CACHES.SQL_ONHEAP_CACHE_MAX_SIZE.null.10",
"SYS.CACHES.QUERY_DETAIL_METRICS_SIZE.null.10",
"SYS.CACHES.QUERY_PARALLELISM.null.10",
"SYS.CACHES.MAX_QUERY_ITERATORS_COUNT.null.10",
"SYS.CACHES.DATA_REGION_NAME.null.2147483647",
"SYS.CACHE_GROUPS.CACHE_GROUP_ID.null.10",
"SYS.CACHE_GROUPS.CACHE_GROUP_NAME.null.2147483647",
"SYS.CACHE_GROUPS.IS_SHARED.null.1",
"SYS.CACHE_GROUPS.CACHE_COUNT.null.10",
"SYS.CACHE_GROUPS.CACHE_MODE.null.2147483647",
"SYS.CACHE_GROUPS.ATOMICITY_MODE.null.2147483647",
"SYS.CACHE_GROUPS.AFFINITY.null.2147483647",
"SYS.CACHE_GROUPS.PARTITIONS_COUNT.null.10",
"SYS.CACHE_GROUPS.NODE_FILTER.null.2147483647",
"SYS.CACHE_GROUPS.DATA_REGION_NAME.null.2147483647",
"SYS.CACHE_GROUPS.TOPOLOGY_VALIDATOR.null.2147483647",
"SYS.CACHE_GROUPS.PARTITION_LOSS_POLICY.null.2147483647",
"SYS.CACHE_GROUPS.REBALANCE_MODE.null.2147483647",
"SYS.CACHE_GROUPS.REBALANCE_DELAY.null.19",
"SYS.CACHE_GROUPS.REBALANCE_ORDER.null.10",
"SYS.CACHE_GROUPS.BACKUPS.null.10",
"SYS.INDEXES.CACHE_GROUP_ID.null.10",
"SYS.INDEXES.CACHE_GROUP_NAME.null.2147483647",
"SYS.INDEXES.CACHE_ID.null.10",
"SYS.INDEXES.CACHE_NAME.null.2147483647",
"SYS.INDEXES.SCHEMA_NAME.null.2147483647",
"SYS.INDEXES.TABLE_NAME.null.2147483647",
"SYS.INDEXES.INDEX_NAME.null.2147483647",
"SYS.INDEXES.INDEX_TYPE.null.2147483647",
"SYS.INDEXES.COLUMNS.null.2147483647",
"SYS.INDEXES.IS_PK.null.1",
"SYS.INDEXES.IS_UNIQUE.null.1",
"SYS.INDEXES.INLINE_SIZE.null.10",
"SYS.LOCAL_CACHE_GROUPS_IO.CACHE_GROUP_ID.null.10",
"SYS.LOCAL_CACHE_GROUPS_IO.CACHE_GROUP_NAME.null.2147483647",
"SYS.LOCAL_CACHE_GROUPS_IO.PHYSICAL_READS.null.19",
"SYS.LOCAL_CACHE_GROUPS_IO.LOGICAL_READS.null.19",
"SYS.SQL_QUERIES_HISTORY.SCHEMA_NAME.null.2147483647",
"SYS.SQL_QUERIES_HISTORY.SQL.null.2147483647",
"SYS.SQL_QUERIES_HISTORY.LOCAL.null.1",
"SYS.SQL_QUERIES_HISTORY.EXECUTIONS.null.19",
"SYS.SQL_QUERIES_HISTORY.FAILURES.null.19",
"SYS.SQL_QUERIES_HISTORY.DURATION_MIN.null.19",
"SYS.SQL_QUERIES_HISTORY.DURATION_MAX.null.19",
"SYS.SQL_QUERIES_HISTORY.LAST_START_TIME.null.26.6",
"SYS.SQL_QUERIES.QUERY_ID.null.2147483647",
"SYS.SQL_QUERIES.SQL.null.2147483647",
"SYS.SQL_QUERIES.SCHEMA_NAME.null.2147483647",
"SYS.SQL_QUERIES.LOCAL.null.1",
"SYS.SQL_QUERIES.START_TIME.null.26.6",
"SYS.SQL_QUERIES.DURATION.null.19",
"SYS.SQL_QUERIES.ORIGIN_NODE_ID.null.2147483647",
"SYS.SQL_QUERIES.INITIATOR_ID.null.2147483647",
"SYS.SQL_QUERIES.SUBJECT_ID.null.2147483647",
"SYS.SCAN_QUERIES.START_TIME.null.19",
"SYS.SCAN_QUERIES.TRANSFORMER.null.2147483647",
"SYS.SCAN_QUERIES.LOCAL.null.1",
"SYS.SCAN_QUERIES.QUERY_ID.null.19",
"SYS.SCAN_QUERIES.PARTITION.null.10",
"SYS.SCAN_QUERIES.CACHE_GROUP_ID.null.10",
"SYS.SCAN_QUERIES.CACHE_NAME.null.2147483647",
"SYS.SCAN_QUERIES.TOPOLOGY.null.2147483647",
"SYS.SCAN_QUERIES.CACHE_GROUP_NAME.null.2147483647",
"SYS.SCAN_QUERIES.TASK_NAME.null.2147483647",
"SYS.SCAN_QUERIES.DURATION.null.19",
"SYS.SCAN_QUERIES.KEEP_BINARY.null.1",
"SYS.SCAN_QUERIES.FILTER.null.2147483647",
"SYS.SCAN_QUERIES.SUBJECT_ID.null.2147483647",
"SYS.SCAN_QUERIES.CANCELED.null.1",
"SYS.SCAN_QUERIES.CACHE_ID.null.10",
"SYS.SCAN_QUERIES.PAGE_SIZE.null.10",
"SYS.SCAN_QUERIES.ORIGIN_NODE_ID.null.2147483647",
"SYS.NODES.NODE_ID.null.2147483647",
"SYS.NODES.CONSISTENT_ID.null.2147483647",
"SYS.NODES.VERSION.null.2147483647",
"SYS.NODES.IS_CLIENT.null.1",
"SYS.NODES.IS_DAEMON.null.1",
"SYS.NODES.IS_LOCAL.null.1",
"SYS.NODES.NODE_ORDER.null.19",
"SYS.NODES.ADDRESSES.null.2147483647",
"SYS.NODES.HOSTNAMES.null.2147483647",
"SYS.NODE_ATTRIBUTES.NODE_ID.null.2147483647",
"SYS.NODE_ATTRIBUTES.NAME.null.2147483647",
"SYS.NODE_ATTRIBUTES.VALUE.null.2147483647",
"SYS.NODE_METRICS.NODE_ID.null.2147483647",
"SYS.NODE_METRICS.LAST_UPDATE_TIME.null.26.6",
"SYS.NODE_METRICS.MAX_ACTIVE_JOBS.null.10",
"SYS.NODE_METRICS.CUR_ACTIVE_JOBS.null.10",
"SYS.NODE_METRICS.AVG_ACTIVE_JOBS.null.7",
"SYS.NODE_METRICS.MAX_WAITING_JOBS.null.10",
"SYS.NODE_METRICS.CUR_WAITING_JOBS.null.10",
"SYS.NODE_METRICS.AVG_WAITING_JOBS.null.7",
"SYS.NODE_METRICS.MAX_REJECTED_JOBS.null.10",
"SYS.NODE_METRICS.CUR_REJECTED_JOBS.null.10",
"SYS.NODE_METRICS.AVG_REJECTED_JOBS.null.7",
"SYS.NODE_METRICS.TOTAL_REJECTED_JOBS.null.10",
"SYS.NODE_METRICS.MAX_CANCELED_JOBS.null.10",
"SYS.NODE_METRICS.CUR_CANCELED_JOBS.null.10",
"SYS.NODE_METRICS.AVG_CANCELED_JOBS.null.7",
"SYS.NODE_METRICS.TOTAL_CANCELED_JOBS.null.10",
"SYS.NODE_METRICS.MAX_JOBS_WAIT_TIME.null.19",
"SYS.NODE_METRICS.CUR_JOBS_WAIT_TIME.null.19",
"SYS.NODE_METRICS.AVG_JOBS_WAIT_TIME.null.19",
"SYS.NODE_METRICS.MAX_JOBS_EXECUTE_TIME.null.19",
"SYS.NODE_METRICS.CUR_JOBS_EXECUTE_TIME.null.19",
"SYS.NODE_METRICS.AVG_JOBS_EXECUTE_TIME.null.19",
"SYS.NODE_METRICS.TOTAL_JOBS_EXECUTE_TIME.null.19",
"SYS.NODE_METRICS.TOTAL_EXECUTED_JOBS.null.10",
"SYS.NODE_METRICS.TOTAL_EXECUTED_TASKS.null.10",
"SYS.NODE_METRICS.TOTAL_BUSY_TIME.null.19",
"SYS.NODE_METRICS.TOTAL_IDLE_TIME.null.19",
"SYS.NODE_METRICS.CUR_IDLE_TIME.null.19",
"SYS.NODE_METRICS.BUSY_TIME_PERCENTAGE.null.7",
"SYS.NODE_METRICS.IDLE_TIME_PERCENTAGE.null.7",
"SYS.NODE_METRICS.TOTAL_CPU.null.10",
"SYS.NODE_METRICS.CUR_CPU_LOAD.null.17",
"SYS.NODE_METRICS.AVG_CPU_LOAD.null.17",
"SYS.NODE_METRICS.CUR_GC_CPU_LOAD.null.17",
"SYS.NODE_METRICS.HEAP_MEMORY_INIT.null.19",
"SYS.NODE_METRICS.HEAP_MEMORY_USED.null.19",
"SYS.NODE_METRICS.HEAP_MEMORY_COMMITED.null.19",
"SYS.NODE_METRICS.HEAP_MEMORY_MAX.null.19",
"SYS.NODE_METRICS.HEAP_MEMORY_TOTAL.null.19",
"SYS.NODE_METRICS.NONHEAP_MEMORY_INIT.null.19",
"SYS.NODE_METRICS.NONHEAP_MEMORY_USED.null.19",
"SYS.NODE_METRICS.NONHEAP_MEMORY_COMMITED.null.19",
"SYS.NODE_METRICS.NONHEAP_MEMORY_MAX.null.19",
"SYS.NODE_METRICS.NONHEAP_MEMORY_TOTAL.null.19",
"SYS.NODE_METRICS.UPTIME.null.19",
"SYS.NODE_METRICS.JVM_START_TIME.null.26.6",
"SYS.NODE_METRICS.NODE_START_TIME.null.26.6",
"SYS.NODE_METRICS.LAST_DATA_VERSION.null.19",
"SYS.NODE_METRICS.CUR_THREAD_COUNT.null.10",
"SYS.NODE_METRICS.MAX_THREAD_COUNT.null.10",
"SYS.NODE_METRICS.TOTAL_THREAD_COUNT.null.19",
"SYS.NODE_METRICS.CUR_DAEMON_THREAD_COUNT.null.10",
"SYS.NODE_METRICS.SENT_MESSAGES_COUNT.null.10",
"SYS.NODE_METRICS.SENT_BYTES_COUNT.null.19",
"SYS.NODE_METRICS.RECEIVED_MESSAGES_COUNT.null.10",
"SYS.NODE_METRICS.RECEIVED_BYTES_COUNT.null.19",
"SYS.NODE_METRICS.OUTBOUND_MESSAGES_QUEUE.null.10",
"SYS.TABLES.CACHE_GROUP_ID.null.10",
"SYS.TABLES.CACHE_GROUP_NAME.null.2147483647",
"SYS.TABLES.CACHE_ID.null.10",
"SYS.TABLES.CACHE_NAME.null.2147483647",
"SYS.TABLES.SCHEMA_NAME.null.2147483647",
"SYS.TABLES.TABLE_NAME.null.2147483647",
"SYS.TABLES.AFFINITY_KEY_COLUMN.null.2147483647",
"SYS.TABLES.KEY_ALIAS.null.2147483647",
"SYS.TABLES.VALUE_ALIAS.null.2147483647",
"SYS.TABLES.KEY_TYPE_NAME.null.2147483647",
"SYS.TABLES.VALUE_TYPE_NAME.null.2147483647",
"SYS.TABLES.IS_INDEX_REBUILD_IN_PROGRESS.null.1",
"SYS.METRICS.NAME.null.2147483647",
"SYS.METRICS.VALUE.null.2147483647",
"SYS.METRICS.DESCRIPTION.null.2147483647",
"SYS.SERVICES.SERVICE_ID.null.2147483647",
"SYS.SERVICES.NAME.null.2147483647",
"SYS.SERVICES.SERVICE_CLASS.null.2147483647",
"SYS.SERVICES.CACHE_NAME.null.2147483647",
"SYS.SERVICES.ORIGIN_NODE_ID.null.2147483647",
"SYS.SERVICES.TOTAL_COUNT.null.10",
"SYS.SERVICES.MAX_PER_NODE_COUNT.null.10",
"SYS.SERVICES.AFFINITY_KEY.null.2147483647",
"SYS.SERVICES.NODE_FILTER.null.2147483647",
"SYS.SERVICES.STATICALLY_CONFIGURED.null.1",
"SYS.SERVICES.SERVICE_ID.null.2147483647",
"SYS.TASKS.AFFINITY_CACHE_NAME.null.2147483647",
"SYS.TASKS.INTERNAL.null.1",
"SYS.TASKS.END_TIME.null.19",
"SYS.TASKS.START_TIME.null.19",
"SYS.TASKS.USER_VERSION.null.2147483647",
"SYS.TASKS.TASK_NAME.null.2147483647",
"SYS.TASKS.TASK_NODE_ID.null.2147483647",
"SYS.TASKS.JOB_ID.null.2147483647",
"SYS.TASKS.ID.null.2147483647",
"SYS.TASKS.SESSION_ID.null.2147483647",
"SYS.TASKS.AFFINITY_PARTITION_ID.null.10",
"SYS.TASKS.TASK_CLASS_NAME.null.2147483647",
"SYS.JOBS.IS_STARTED.null.1",
"SYS.JOBS.EXECUTOR_NAME.null.2147483647",
"SYS.JOBS.IS_TIMED_OUT.null.1",
"SYS.JOBS.ID.null.2147483647",
"SYS.JOBS.FINISH_TIME.null.19",
"SYS.JOBS.IS_INTERNAL.null.1",
"SYS.JOBS.CREATE_TIME.null.19",
"SYS.JOBS.AFFINITY_PARTITION_ID.null.10",
"SYS.JOBS.ORIGIN_NODE_ID.null.2147483647",
"SYS.JOBS.TASK_NAME.null.2147483647",
"SYS.JOBS.TASK_CLASS_NAME.null.2147483647",
"SYS.JOBS.SESSION_ID.null.2147483647",
"SYS.JOBS.IS_FINISHING.null.1",
"SYS.JOBS.START_TIME.null.19",
"SYS.JOBS.AFFINITY_CACHE_IDS.null.2147483647",
"SYS.JOBS.STATE.null.2147483647",
"SYS.CLIENT_CONNECTIONS.CONNECTION_ID.null.19",
"SYS.CLIENT_CONNECTIONS.LOCAL_ADDRESS.null.2147483647",
"SYS.CLIENT_CONNECTIONS.REMOTE_ADDRESS.null.2147483647",
"SYS.CLIENT_CONNECTIONS.TYPE.null.2147483647",
"SYS.CLIENT_CONNECTIONS.USER.null.2147483647",
"SYS.CLIENT_CONNECTIONS.VERSION.null.2147483647",
"SYS.TASKS.EXEC_NAME.null.2147483647",
"SYS.TRANSACTIONS.LOCAL_NODE_ID.null.2147483647",
"SYS.TRANSACTIONS.STATE.null.2147483647",
"SYS.TRANSACTIONS.XID.null.2147483647",
"SYS.TRANSACTIONS.LABEL.null.2147483647",
"SYS.TRANSACTIONS.START_TIME.null.19",
"SYS.TRANSACTIONS.ISOLATION.null.2147483647",
"SYS.TRANSACTIONS.CONCURRENCY.null.2147483647",
"SYS.TRANSACTIONS.COLOCATED.null.1",
"SYS.TRANSACTIONS.DHT.null.1",
"SYS.TRANSACTIONS.IMPLICIT.null.1",
"SYS.TRANSACTIONS.IMPLICIT_SINGLE.null.1",
"SYS.TRANSACTIONS.INTERNAL.null.1",
"SYS.TRANSACTIONS.LOCAL.null.1",
"SYS.TRANSACTIONS.NEAR.null.1",
"SYS.TRANSACTIONS.ONE_PHASE_COMMIT.null.1",
"SYS.TRANSACTIONS.SUBJECT_ID.null.2147483647",
"SYS.TRANSACTIONS.SYSTEM.null.1",
"SYS.TRANSACTIONS.THREAD_ID.null.19",
"SYS.TRANSACTIONS.TIMEOUT.null.19",
"SYS.TRANSACTIONS.DURATION.null.19",
"SYS.TRANSACTIONS.ORIGINATING_NODE_ID.null.2147483647",
"SYS.TRANSACTIONS.OTHER_NODE_ID.null.2147483647",
"SYS.TRANSACTIONS.TOP_VER.null.2147483647",
"SYS.TRANSACTIONS.KEYS_COUNT.null.10",
"SYS.TRANSACTIONS.CACHE_IDS.null.2147483647",
"SYS.SCHEMAS.SCHEMA_NAME.null.2147483647",
"SYS.SCHEMAS.PREDEFINED.null.1",
"SYS.VIEWS.NAME.null.2147483647",
"SYS.VIEWS.DESCRIPTION.null.2147483647",
"SYS.VIEWS.SCHEMA.null.2147483647",
"SYS.TABLE_COLUMNS.AFFINITY_COLUMN.null.1",
"SYS.TABLE_COLUMNS.COLUMN_NAME.null.2147483647",
"SYS.TABLE_COLUMNS.SCALE.null.10",
"SYS.TABLE_COLUMNS.PK.null.1",
"SYS.TABLE_COLUMNS.TYPE.null.2147483647",
"SYS.TABLE_COLUMNS.DEFAULT_VALUE.null.2147483647",
"SYS.TABLE_COLUMNS.SCHEMA_NAME.null.2147483647",
"SYS.TABLE_COLUMNS.TABLE_NAME.null.2147483647",
"SYS.TABLE_COLUMNS.NULLABLE.null.1",
"SYS.TABLE_COLUMNS.PRECISION.null.10",
"SYS.TABLE_COLUMNS.AUTO_INCREMENT.null.1",
"SYS.VIEW_COLUMNS.NULLABLE.null.1",
"SYS.VIEW_COLUMNS.SCHEMA_NAME.null.2147483647",
"SYS.VIEW_COLUMNS.COLUMN_NAME.null.2147483647",
"SYS.VIEW_COLUMNS.TYPE.null.2147483647",
"SYS.VIEW_COLUMNS.PRECISION.null.19",
"SYS.VIEW_COLUMNS.DEFAULT_VALUE.null.2147483647",
"SYS.VIEW_COLUMNS.SCALE.null.10",
"SYS.VIEW_COLUMNS.VIEW_NAME.null.2147483647",
"SYS.CONTINUOUS_QUERIES.NOTIFY_EXISTING.null.1",
"SYS.CONTINUOUS_QUERIES.OLD_VALUE_REQUIRED.null.1",
"SYS.CONTINUOUS_QUERIES.KEEP_BINARY.null.1",
"SYS.CONTINUOUS_QUERIES.IS_MESSAGING.null.1",
"SYS.CONTINUOUS_QUERIES.AUTO_UNSUBSCRIBE.null.1",
"SYS.CONTINUOUS_QUERIES.LAST_SEND_TIME.null.19",
"SYS.CONTINUOUS_QUERIES.LOCAL_TRANSFORMED_LISTENER.null.2147483647",
"SYS.CONTINUOUS_QUERIES.TOPIC.null.2147483647",
"SYS.CONTINUOUS_QUERIES.BUFFER_SIZE.null.10",
"SYS.CONTINUOUS_QUERIES.REMOTE_TRANSFORMER.null.2147483647",
"SYS.CONTINUOUS_QUERIES.DELAYED_REGISTER.null.1",
"SYS.CONTINUOUS_QUERIES.IS_QUERY.null.1",
"SYS.CONTINUOUS_QUERIES.NODE_ID.null.2147483647",
"SYS.CONTINUOUS_QUERIES.INTERVAL.null.19",
"SYS.CONTINUOUS_QUERIES.IS_EVENTS.null.1",
"SYS.CONTINUOUS_QUERIES.ROUTINE_ID.null.2147483647",
"SYS.CONTINUOUS_QUERIES.REMOTE_FILTER.null.2147483647",
"SYS.CONTINUOUS_QUERIES.CACHE_NAME.null.2147483647",
"SYS.CONTINUOUS_QUERIES.LOCAL_LISTENER.null.2147483647",
"SYS.STRIPED_THREADPOOL_QUEUE.STRIPE_INDEX.null.10",
"SYS.STRIPED_THREADPOOL_QUEUE.DESCRIPTION.null.2147483647",
"SYS.STRIPED_THREADPOOL_QUEUE.THREAD_NAME.null.2147483647",
"SYS.STRIPED_THREADPOOL_QUEUE.TASK_NAME.null.2147483647",
"SYS.DATASTREAM_THREADPOOL_QUEUE.STRIPE_INDEX.null.10",
"SYS.DATASTREAM_THREADPOOL_QUEUE.DESCRIPTION.null.2147483647",
"SYS.DATASTREAM_THREADPOOL_QUEUE.THREAD_NAME.null.2147483647",
"SYS.DATASTREAM_THREADPOOL_QUEUE.TASK_NAME.null.2147483647",
"SYS.CACHE_GROUP_PAGE_LISTS.CACHE_GROUP_ID.null.10",
"SYS.CACHE_GROUP_PAGE_LISTS.PARTITION_ID.null.10",
"SYS.CACHE_GROUP_PAGE_LISTS.NAME.null.2147483647",
"SYS.CACHE_GROUP_PAGE_LISTS.BUCKET_NUMBER.null.10",
"SYS.CACHE_GROUP_PAGE_LISTS.BUCKET_SIZE.null.19",
"SYS.CACHE_GROUP_PAGE_LISTS.STRIPES_COUNT.null.10",
"SYS.CACHE_GROUP_PAGE_LISTS.CACHED_PAGES_COUNT.null.10",
"SYS.DATA_REGION_PAGE_LISTS.NAME.null.2147483647",
"SYS.DATA_REGION_PAGE_LISTS.BUCKET_NUMBER.null.10",
"SYS.DATA_REGION_PAGE_LISTS.BUCKET_SIZE.null.19",
"SYS.DATA_REGION_PAGE_LISTS.STRIPES_COUNT.null.10",
"SYS.DATA_REGION_PAGE_LISTS.CACHED_PAGES_COUNT.null.10",
"SYS.PARTITION_STATES.CACHE_GROUP_ID.null.10",
"SYS.PARTITION_STATES.PARTITION_ID.null.10",
"SYS.PARTITION_STATES.NODE_ID.null.2147483647",
"SYS.PARTITION_STATES.STATE.null.2147483647",
"SYS.PARTITION_STATES.IS_PRIMARY.null.1",
"SYS.BINARY_METADATA.FIELDS.null.2147483647",
"SYS.BINARY_METADATA.AFF_KEY_FIELD_NAME.null.2147483647",
"SYS.BINARY_METADATA.SCHEMAS_IDS.null.2147483647",
"SYS.BINARY_METADATA.TYPE_ID.null.10",
"SYS.BINARY_METADATA.IS_ENUM.null.1",
"SYS.BINARY_METADATA.FIELDS_COUNT.null.10",
"SYS.BINARY_METADATA.TYPE_NAME.null.2147483647",
"SYS.DISTRIBUTED_METASTORAGE.NAME.null.2147483647",
"SYS.DISTRIBUTED_METASTORAGE.VALUE.null.2147483647",
"SYS.DS_ATOMICLONGS.GROUP_ID.null.10",
"SYS.DS_ATOMICLONGS.GROUP_NAME.null.2147483647",
"SYS.DS_ATOMICLONGS.NAME.null.2147483647",
"SYS.DS_ATOMICLONGS.REMOVED.null.1",
"SYS.DS_ATOMICLONGS.VALUE.null.19",
"SYS.DS_ATOMICREFERENCES.GROUP_ID.null.10",
"SYS.DS_ATOMICREFERENCES.GROUP_NAME.null.2147483647",
"SYS.DS_ATOMICREFERENCES.NAME.null.2147483647",
"SYS.DS_ATOMICREFERENCES.REMOVED.null.1",
"SYS.DS_ATOMICREFERENCES.VALUE.null.2147483647",
"SYS.DS_ATOMICSEQUENCES.BATCH_SIZE.null.19",
"SYS.DS_ATOMICSEQUENCES.GROUP_ID.null.10",
"SYS.DS_ATOMICSEQUENCES.GROUP_NAME.null.2147483647",
"SYS.DS_ATOMICSEQUENCES.NAME.null.2147483647",
"SYS.DS_ATOMICSEQUENCES.REMOVED.null.1",
"SYS.DS_ATOMICSEQUENCES.VALUE.null.19",
"SYS.DS_ATOMICSTAMPED.GROUP_ID.null.10",
"SYS.DS_ATOMICSTAMPED.GROUP_NAME.null.2147483647",
"SYS.DS_ATOMICSTAMPED.NAME.null.2147483647",
"SYS.DS_ATOMICSTAMPED.REMOVED.null.1",
"SYS.DS_ATOMICSTAMPED.STAMP.null.2147483647",
"SYS.DS_ATOMICSTAMPED.VALUE.null.2147483647",
"SYS.DS_COUNTDOWNLATCHES.AUTO_DELETE.null.1",
"SYS.DS_COUNTDOWNLATCHES.COUNT.null.10",
"SYS.DS_COUNTDOWNLATCHES.GROUP_ID.null.10",
"SYS.DS_COUNTDOWNLATCHES.GROUP_NAME.null.2147483647",
"SYS.DS_COUNTDOWNLATCHES.INITIAL_COUNT.null.10",
"SYS.DS_COUNTDOWNLATCHES.NAME.null.2147483647",
"SYS.DS_COUNTDOWNLATCHES.REMOVED.null.1",
"SYS.DS_QUEUES.BOUNDED.null.1",
"SYS.DS_QUEUES.CAPACITY.null.10",
"SYS.DS_QUEUES.SIZE.null.10",
"SYS.DS_QUEUES.COLLOCATED.null.1",
"SYS.DS_QUEUES.GROUP_ID.null.10",
"SYS.DS_QUEUES.GROUP_NAME.null.2147483647",
"SYS.DS_QUEUES.ID.null.2147483647",
"SYS.DS_QUEUES.NAME.null.2147483647",
"SYS.DS_QUEUES.REMOVED.null.1",
"SYS.DS_REENTRANTLOCKS.BROKEN.null.1",
"SYS.DS_REENTRANTLOCKS.FAILOVER_SAFE.null.1",
"SYS.DS_REENTRANTLOCKS.FAIR.null.1",
"SYS.DS_REENTRANTLOCKS.GROUP_ID.null.10",
"SYS.DS_REENTRANTLOCKS.GROUP_NAME.null.2147483647",
"SYS.DS_REENTRANTLOCKS.HAS_QUEUED_THREADS.null.1",
"SYS.DS_REENTRANTLOCKS.LOCKED.null.1",
"SYS.DS_REENTRANTLOCKS.NAME.null.2147483647",
"SYS.DS_REENTRANTLOCKS.REMOVED.null.1",
"SYS.DS_SEMAPHORES.AVAILABLE_PERMITS.null.19",
"SYS.DS_SEMAPHORES.BROKEN.null.1",
"SYS.DS_SEMAPHORES.FAILOVER_SAFE.null.1",
"SYS.DS_SEMAPHORES.GROUP_ID.null.10",
"SYS.DS_SEMAPHORES.GROUP_NAME.null.2147483647",
"SYS.DS_SEMAPHORES.HAS_QUEUED_THREADS.null.1",
"SYS.DS_SEMAPHORES.NAME.null.2147483647",
"SYS.DS_SEMAPHORES.QUEUE_LENGTH.null.10",
"SYS.DS_SEMAPHORES.REMOVED.null.1",
"SYS.DS_SETS.COLLOCATED.null.1",
"SYS.DS_SETS.GROUP_ID.null.10",
"SYS.DS_SETS.GROUP_NAME.null.2147483647",
"SYS.DS_SETS.ID.null.2147483647",
"SYS.DS_SETS.NAME.null.2147483647",
"SYS.DS_SETS.REMOVED.null.1",
"SYS.DS_SETS.SIZE.null.10",
"SYS.STATISTICS_LOCAL_DATA.LAST_UPDATE_TIME.null.2147483647",
"SYS.STATISTICS_LOCAL_DATA.NAME.null.2147483647",
"SYS.STATISTICS_LOCAL_DATA.TOTAL.null.19",
"SYS.STATISTICS_PARTITION_DATA.VERSION.null.19",
"SYS.STATISTICS_CONFIGURATION.TYPE.null.2147483647",
"SYS.STATISTICS_PARTITION_DATA.NAME.null.2147483647",
"SYS.STATISTICS_CONFIGURATION.COLUMN.null.2147483647",
"SYS.STATISTICS_LOCAL_DATA.ROWS_COUNT.null.19",
"SYS.STATISTICS_PARTITION_DATA.TYPE.null.2147483647",
"SYS.STATISTICS_LOCAL_DATA.DISTINCT.null.19",
"SYS.STATISTICS_LOCAL_DATA.SIZE.null.10",
"SYS.STATISTICS_PARTITION_DATA.LAST_UPDATE_TIME.null.19",
"SYS.STATISTICS_CONFIGURATION.MAX_PARTITION_OBSOLESCENCE_PERCENT.null.3",
"SYS.STATISTICS_LOCAL_DATA.VERSION.null.19",
"SYS.STATISTICS_LOCAL_DATA.COLUMN.null.2147483647",
"SYS.STATISTICS_CONFIGURATION.SCHEMA.null.2147483647",
"SYS.STATISTICS_PARTITION_DATA.TOTAL.null.19",
"SYS.STATISTICS_PARTITION_DATA.PARTITION.null.10",
"SYS.STATISTICS_PARTITION_DATA.SCHEMA.null.2147483647",
"SYS.STATISTICS_PARTITION_DATA.ROWS_COUNT.null.19",
"SYS.STATISTICS_PARTITION_DATA.SIZE.null.10",
"SYS.STATISTICS_PARTITION_DATA.UPDATE_COUNTER.null.19",
"SYS.STATISTICS_CONFIGURATION.NAME.null.2147483647",
"SYS.STATISTICS_PARTITION_DATA.DISTINCT.null.19",
"SYS.STATISTICS_LOCAL_DATA.NULLS.null.19",
"SYS.STATISTICS_CONFIGURATION.VERSION.null.19",
"SYS.STATISTICS_CONFIGURATION.MANUAL_SIZE.null.10",
"SYS.STATISTICS_CONFIGURATION.MANUAL_DISTINCT.null.19",
"SYS.STATISTICS_CONFIGURATION.MANUAL_NULLS.null.19",
"SYS.STATISTICS_CONFIGURATION.MANUAL_TOTAL.null.19",
"SYS.STATISTICS_LOCAL_DATA.TYPE.null.2147483647",
"SYS.STATISTICS_PARTITION_DATA.NULLS.null.19",
"SYS.STATISTICS_PARTITION_DATA.COLUMN.null.2147483647",
"SYS.STATISTICS_LOCAL_DATA.SCHEMA.null.2147483647",
"SYS.STATISTICS_GLOBAL_DATA.SCHEMA.null.2147483647",
"SYS.STATISTICS_GLOBAL_DATA.TYPE.null.2147483647",
"SYS.STATISTICS_GLOBAL_DATA.NAME.null.2147483647",
"SYS.STATISTICS_GLOBAL_DATA.COLUMN.null.2147483647",
"SYS.STATISTICS_GLOBAL_DATA.ROWS_COUNT.null.19",
"SYS.STATISTICS_GLOBAL_DATA.DISTINCT.null.19",
"SYS.STATISTICS_GLOBAL_DATA.NULLS.null.19",
"SYS.STATISTICS_GLOBAL_DATA.TOTAL.null.19",
"SYS.STATISTICS_GLOBAL_DATA.SIZE.null.10",
"SYS.STATISTICS_GLOBAL_DATA.VERSION.null.19",
"SYS.STATISTICS_GLOBAL_DATA.LAST_UPDATE_TIME.null.2147483647"
));
Assert.assertEquals(expectedCols, actualSystemCols);
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testInvalidCatalog() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
ResultSet rs = meta.getSchemas("q", null);
assert !rs.next() : "Results must be empty";
rs = meta.getTables("q", null, null, null);
assert !rs.next() : "Results must be empty";
rs = meta.getColumns("q", null, null, null);
assert !rs.next() : "Results must be empty";
rs = meta.getIndexInfo("q", null, null, false, false);
assert !rs.next() : "Results must be empty";
rs = meta.getPrimaryKeys("q", null, null);
assert !rs.next() : "Results must be empty";
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testIndexMetadata() throws Exception {
try (Connection conn = DriverManager.getConnection(URL);
ResultSet rs = conn.getMetaData().getIndexInfo(null, "pers", "PERSON", false, false)) {
int cnt = 0;
while (rs.next()) {
String idxName = rs.getString("INDEX_NAME");
String field = rs.getString("COLUMN_NAME");
String ascOrDesc = rs.getString("ASC_OR_DESC");
assert rs.getShort("TYPE") == DatabaseMetaData.tableIndexOther;
if ("PERSON_ORGID_ASC_IDX".equals(idxName)) {
assert "ORGID".equals(field);
assert "A".equals(ascOrDesc);
}
else if ("PERSON_NAME_ASC_AGE_DESC_IDX".equals(idxName)) {
if ("NAME".equals(field))
assert "A".equals(ascOrDesc);
else if ("AGE".equals(field))
assert "D".equals(ascOrDesc);
else
fail("Unexpected field: " + field);
}
else
fail("Unexpected index: " + idxName);
cnt++;
}
assert cnt == 3;
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetAllIndexes() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
ResultSet rs = conn.getMetaData().getIndexInfo(null, null, null, false, false);
Set<String> expectedIdxs = new HashSet<>(Arrays.asList(
"org.ORGANIZATION.ORGANIZATION_ID_ASC_IDX",
"org.ORGANIZATION.ORG_NAME_INDEX",
"pers.PERSON.PERSON_ORGID_ASC_IDX",
"pers.PERSON.PERSON_NAME_ASC_AGE_DESC_IDX",
"PUBLIC.TEST.IDX",
"PUBLIC.Quoted.MyTestIndex quoted"));
Set<String> actualIdxs = new HashSet<>(expectedIdxs.size());
while (rs.next()) {
actualIdxs.add(rs.getString("TABLE_SCHEM") +
'.' + rs.getString("TABLE_NAME") +
'.' + rs.getString("INDEX_NAME"));
}
assert expectedIdxs.equals(actualIdxs) : "expectedIdxs=" + expectedIdxs +
", actualIdxs" + actualIdxs;
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testPrimaryKeyMetadata() throws Exception {
try (Connection conn = DriverManager.getConnection(URL);
ResultSet rs = conn.getMetaData().getPrimaryKeys(null, "pers", "PERSON")) {
int cnt = 0;
while (rs.next()) {
assert "_KEY".equals(rs.getString("COLUMN_NAME"));
cnt++;
}
assert cnt == 1;
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testGetAllPrimaryKeys() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
ResultSet rs = conn.getMetaData().getPrimaryKeys(null, null, null);
Set<String> expectedPks = new HashSet<>(Arrays.asList(
"org.ORGANIZATION.PK_org_ORGANIZATION._KEY",
"pers.PERSON.PK_pers_PERSON._KEY",
"dep.DEPARTMENT.PK_dep_DEPARTMENT._KEY",
"PUBLIC.TEST.PK_PUBLIC_TEST.ID",
"PUBLIC.TEST.PK_PUBLIC_TEST.NAME",
"PUBLIC.Quoted.PK_PUBLIC_Quoted.Id",
"PUBLIC.TEST_DECIMAL_COLUMN.ID.ID",
"PUBLIC.TEST_DECIMAL_COLUMN_PRECISION.ID.ID",
"PUBLIC.TEST_DECIMAL_DATE_COLUMN_META.ID.ID"));
Set<String> actualPks = new HashSet<>(expectedPks.size());
while (rs.next()) {
actualPks.add(rs.getString("TABLE_SCHEM") +
'.' + rs.getString("TABLE_NAME") +
'.' + rs.getString("PK_NAME") +
'.' + rs.getString("COLUMN_NAME"));
}
assertEquals("Metadata contains unexpected primary keys info.", expectedPks, actualPks);
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testParametersMetadata() throws Exception {
// Perform checks few times due to query/plan caching.
for (int i = 0; i < 3; i++) {
// No parameters statement.
try (Connection conn = DriverManager.getConnection(URL)) {
conn.setSchema("\"pers\"");
PreparedStatement noParams = conn.prepareStatement("select * from Person;");
ParameterMetaData params = noParams.getParameterMetaData();
assertEquals("Parameters should be empty.", 0, params.getParameterCount());
}
// Selects.
try (Connection conn = DriverManager.getConnection(URL)) {
conn.setSchema("\"pers\"");
PreparedStatement selectStmt = conn.prepareStatement("select orgId from Person p where p.name > ? and p.orgId > ?");
ParameterMetaData meta = selectStmt.getParameterMetaData();
assertNotNull(meta);
assertEquals(2, meta.getParameterCount());
assertEquals(Types.VARCHAR, meta.getParameterType(1));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(1));
assertEquals(Integer.MAX_VALUE, meta.getPrecision(1));
assertEquals(Types.INTEGER, meta.getParameterType(2));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(2));
}
// Updates.
try (Connection conn = DriverManager.getConnection(URL)) {
conn.setSchema("\"pers\"");
PreparedStatement updateStmt = conn.prepareStatement("update Person p set orgId = 42 where p.name > ? and p.orgId > ?");
ParameterMetaData meta = updateStmt.getParameterMetaData();
assertNotNull(meta);
assertEquals(2, meta.getParameterCount());
assertEquals(Types.VARCHAR, meta.getParameterType(1));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(1));
assertEquals(Integer.MAX_VALUE, meta.getPrecision(1));
assertEquals(Types.INTEGER, meta.getParameterType(2));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(2));
}
// Multistatement
try (Connection conn = DriverManager.getConnection(URL)) {
conn.setSchema("\"pers\"");
PreparedStatement updateStmt = conn.prepareStatement(
"update Person p set orgId = 42 where p.name > ? and p.orgId > ?;" +
"select orgId from Person p where p.name > ? and p.orgId > ?");
ParameterMetaData meta = updateStmt.getParameterMetaData();
assertNotNull(meta);
assertEquals(4, meta.getParameterCount());
assertEquals(Types.VARCHAR, meta.getParameterType(1));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(1));
assertEquals(Integer.MAX_VALUE, meta.getPrecision(1));
assertEquals(Types.INTEGER, meta.getParameterType(2));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(2));
assertEquals(Types.VARCHAR, meta.getParameterType(3));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(3));
assertEquals(Integer.MAX_VALUE, meta.getPrecision(3));
assertEquals(Types.INTEGER, meta.getParameterType(4));
assertEquals(ParameterMetaData.parameterNullableUnknown, meta.isNullable(4));
}
}
}
/**
* Check that parameters metadata throws correct exception on non-parsable statement.
*/
@Test
public void testParametersMetadataNegative() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
conn.setSchema("\"pers\"");
PreparedStatement notCorrect = conn.prepareStatement("select * from NotExistingTable;");
GridTestUtils.assertThrows(log(), notCorrect::getParameterMetaData, SQLException.class,
"Table \"NOTEXISTINGTABLE\" not found");
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testSchemasMetadata() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
ResultSet rs = conn.getMetaData().getSchemas();
Set<String> expectedSchemas = new HashSet<>(Arrays.asList(SCHEMA_SYS, DFLT_SCHEMA,
"pers", "org", "dep", "PREDEFINED_SCHEMAS_1", "PREDEFINED_SCHEMAS_2"));
Set<String> schemas = new HashSet<>();
while (rs.next()) {
schemas.add(rs.getString(1));
assertEquals("There is only one possible catalog.",
JdbcUtils.CATALOG_NAME, rs.getString(2));
}
assert expectedSchemas.equals(schemas) : "Unexpected schemas: " + schemas +
". Expected schemas: " + expectedSchemas;
}
}
/**
* Negative scenarios for catalog name.
* Perform metadata lookups, that use incorrect catalog names.
*/
@Test
public void testCatalogWithNotExistingName() throws SQLException {
checkNoEntitiesFoundForCatalog("");
checkNoEntitiesFoundForCatalog("NOT_EXISTING_CATALOG");
}
/**
* Check that lookup in the metadata have been performed using specified catalog name (that is neither {@code null}
* nor correct catalog name), empty result set is returned.
*
* @param invalidCat catalog name that is not either
*/
private void checkNoEntitiesFoundForCatalog(String invalidCat) throws SQLException {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
// Intention: we set the other arguments that way, the values to have as many results as possible.
assertIsEmpty(meta.getTables(invalidCat, null, "%", new String[] {"TABLE"}));
assertIsEmpty(meta.getColumns(invalidCat, null, "%", "%"));
assertIsEmpty(meta.getColumnPrivileges(invalidCat, "pers", "PERSON", "%"));
assertIsEmpty(meta.getTablePrivileges(invalidCat, null, "%"));
assertIsEmpty(meta.getPrimaryKeys(invalidCat, "pers", "PERSON"));
assertIsEmpty(meta.getImportedKeys(invalidCat, "pers", "PERSON"));
assertIsEmpty(meta.getExportedKeys(invalidCat, "pers", "PERSON"));
// meta.getCrossReference(...) doesn't make sense because we don't have FK constraint.
assertIsEmpty(meta.getIndexInfo(invalidCat, null, "%", false, true));
assertIsEmpty(meta.getSuperTables(invalidCat, "%", "%"));
assertIsEmpty(meta.getSchemas(invalidCat, null));
assertIsEmpty(meta.getPseudoColumns(invalidCat, null, "%", ""));
}
}
/**
* Assert that specified ResultSet contains no rows.
*
* @param rs result set to check.
* @throws SQLException on error.
*/
private static void assertIsEmpty(ResultSet rs) throws SQLException {
try {
boolean empty = !rs.next();
assertTrue("Result should be empty because invalid catalog is specified.", empty);
}
finally {
rs.close();
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testEmptySchemasMetadata() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
ResultSet rs = conn.getMetaData().getSchemas(null, "qqq");
assert !rs.next() : "Empty result set is expected";
}
}
/**
* @throws Exception If failed.
*/
@Test
public void testVersions() throws Exception {
try (Connection conn = DriverManager.getConnection(URL)) {
assertEquals("Unexpected ignite database product version.",
conn.getMetaData().getDatabaseProductVersion(), IgniteVersionUtils.VER.toString());
assertEquals("Unexpected ignite driver version.",
conn.getMetaData().getDriverVersion(), IgniteVersionUtils.VER.toString());
}
try (Connection conn = DriverManager.getConnection(URL_PARTITION_AWARENESS)) {
assertEquals("Unexpected ignite database product version.",
conn.getMetaData().getDatabaseProductVersion(), IgniteVersionUtils.VER.toString());
assertEquals("Unexpected ignite driver version.",
conn.getMetaData().getDriverVersion(), IgniteVersionUtils.VER.toString());
}
}
/**
* Check JDBC support flags.
*/
@Test
public void testCheckSupports() throws SQLException {
try (Connection conn = DriverManager.getConnection(URL)) {
DatabaseMetaData meta = conn.getMetaData();
assertTrue(meta.supportsANSI92EntryLevelSQL());
assertTrue(meta.supportsAlterTableWithAddColumn());
assertTrue(meta.supportsAlterTableWithDropColumn());
assertTrue(meta.nullPlusNonNullIsNull());
}
}
/**
* Person.
*/
private static class Person implements Serializable {
/** Name. */
private final String name;
/** Age. */
private final int age;
/** Organization ID. */
private final int orgId;
/**
* @param name Name.
* @param age Age.
* @param orgId Organization ID.
*/
private Person(String name, int age, int orgId) {
assert !F.isEmpty(name);
assert age > 0;
assert orgId > 0;
this.name = name;
this.age = age;
this.orgId = orgId;
}
}
/**
* Organization.
*/
private static class Organization implements Serializable {
/** ID. */
private final int id;
/** Name. */
private final String name;
/**
* @param id ID.
* @param name Name.
*/
private Organization(int id, String name) {
this.id = id;
this.name = name;
}
}
/**
* Organization.
*/
private static class Department implements Serializable {
/** ID. */
@QuerySqlField
private final int id;
/** Name. */
@QuerySqlField(precision = 43)
private final String name;
/**
* @param id ID.
* @param name Name.
*/
private Department(int id, String name) {
this.id = id;
this.name = name;
}
}
/** */
private enum MetadataColumn {
/** */
TABLE_SCHEMA("TABLE_SCHEM"),
/** */
COLUMN_NAME("COLUMN_NAME");
/** Column name. */
private final String colName;
/**
* @param colName Column name.
*/
MetadataColumn(String colName) {
this.colName = colName;
}
/** */
public String columnName() {
return colName;
}
}
}