diff --git a/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp b/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp index be80f0433e..f152ca1577 100644 --- a/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21151_21200.cpp @@ -2010,7 +2010,7 @@ int ObInnerTableSchema::cdb_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT/*+leading(DB,T,C,STAT)*/ CAST(DB.TENANT_ID AS SIGNED) AS CON_ID, CAST(DB.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(T.TABLE_NAME AS CHAR(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS CHAR(128)) AS COLUMN_NAME, CAST(CASE C.DATA_TYPE WHEN 0 THEN 'VARCHAR2' WHEN 1 THEN 'NUMBER' WHEN 2 THEN 'NUMBER' WHEN 3 THEN 'NUMBER' WHEN 4 THEN 'NUMBER' WHEN 5 THEN 'NUMBER' WHEN 6 THEN 'NUMBER' WHEN 7 THEN 'NUMBER' WHEN 8 THEN 'NUMBER' WHEN 9 THEN 'NUMBER' WHEN 10 THEN 'NUMBER' WHEN 11 THEN 'BINARY_FLOAT' WHEN 12 THEN 'BINARY_DOUBLE' WHEN 13 THEN 'NUMBER' WHEN 14 THEN 'NUMBER' WHEN 15 THEN 'NUMBER' WHEN 16 THEN 'NUMBER' WHEN 17 THEN 'DATE' WHEN 18 THEN 'TIMESTAMP' WHEN 19 THEN 'DATE' WHEN 20 THEN 'TIME' WHEN 21 THEN 'YEAR' WHEN 22 THEN 'VARCHAR2' WHEN 23 THEN 'CHAR' WHEN 24 THEN 'HEX_STRING' WHEN 25 THEN 'UNDEFINED' WHEN 26 THEN 'UNKNOWN' WHEN 27 THEN 'TINYTEXT' WHEN 28 THEN 'TEXT' WHEN 29 THEN 'MEDIUMTEXT' WHEN 30 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 31 THEN 'BIT' WHEN 32 THEN 'ENUM' WHEN 33 THEN 'SET' WHEN 34 THEN 'ENUM_INNER' WHEN 35 THEN 'SET_INNER' WHEN 36 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')) WHEN 37 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')) WHEN 38 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')) WHEN 39 THEN 'RAW' WHEN 40 THEN CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')) WHEN 41 THEN CONCAT('INTERVAL DAY(', CONCAT(FLOOR(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))) WHEN 42 THEN 'FLOAT' WHEN 43 THEN 'NVARCHAR2' WHEN 44 THEN 'NCHAR' WHEN 45 THEN 'UROWID' WHEN 46 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 47 THEN 'JSON' WHEN 50 THEN 'NUMBER' ELSE 'UNDEFINED' END AS CHAR(128)) AS DATA_TYPE, CAST(NULL AS CHAR(3)) AS DATA_TYPE_MOD, CAST(NULL AS CHAR(128)) AS DATA_TYPE_OWNER, CAST(C.DATA_LENGTH * CASE WHEN C.DATA_TYPE IN (22,23,30,43,44,46) AND C.DATA_PRECISION = 1 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 1 WHEN 249 THEN 4 WHEN 248 THEN 4 WHEN 87 THEN 2 WHEN 28 THEN 2 WHEN 55 THEN 4 WHEN 54 THEN 4 WHEN 101 THEN 2 WHEN 46 THEN 4 WHEN 45 THEN 4 WHEN 224 THEN 4 ELSE 1 END) ELSE 1 END AS SIGNED) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS SIGNED) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS SIGNED) AS DATA_SCALE, CAST((CASE WHEN C.NULLABLE = 0 THEN 'N' WHEN (C.COLUMN_FLAGS & (5 * POWER(2, 13))) = 5 * POWER(2, 13) THEN 'N' ELSE 'Y' END) AS CHAR(1)) AS NULLABLE, CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN C.COLUMN_ID ELSE NULL END AS SIGNED) AS COLUMN_ID, CAST(LENGTH(C.CUR_DEFAULT_VALUE_V2) AS SIGNED) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ CHAR(262144)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS SIGNED) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ CHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ CHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS SIGNED) AS DENSITY, CAST(STAT.NULL_CNT AS SIGNED) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS SIGNED) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS SIGNED) AS SAMPLE_SIZE, CAST(CASE C.DATA_TYPE WHEN 22 THEN 'CHAR_CS' WHEN 23 THEN 'CHAR_CS' WHEN 30 THEN (CASE WHEN C.COLLATION_TYPE = 63 THEN 'NULL' ELSE 'CHAR_CS' END) WHEN 43 THEN 'NCHAR_CS' WHEN 44 THEN 'NCHAR_CS' ELSE '' END AS CHAR(44)) AS CHARACTER_SET_NAME, CAST(NULL AS SIGNED) AS CHAR_COL_DECL_LENGTH, CAST(CASE STAT.GLOBAL_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS GLOBAL_STATS, CAST(CASE STAT.USER_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS USER_STATS, CAST(NULL AS CHAR(80)) AS NOTES, CAST(STAT.AVG_LEN AS SIGNED) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS SIGNED) AS CHAR_LENGTH, CAST(CASE C.DATA_TYPE WHEN 22 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 23 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 43 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 44 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) ELSE NULL END AS CHAR(1)) AS CHAR_USED, CAST(NULL AS CHAR(3)) AS V80_FMT_IMAGE, CAST(NULL AS CHAR(3)) AS DATA_UPGRADED, CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN 'NO' ELSE 'YES' END AS CHAR(3)) AS HIDDEN_COLUMN, CAST(CASE WHEN (C.COLUMN_FLAGS & 1) = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS VIRTUAL_COLUMN, CAST(NULL AS SIGNED) AS SEGMENT_COLUMN_ID, CAST(NULL AS SIGNED) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS CHAR(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS CHAR(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS CHAR(3)) AS USER_GENERATED, CAST(NULL AS CHAR(3)) AS DEFAULT_ON_NULL, CAST(NULL AS CHAR(3)) AS IDENTITY_COLUMN, CAST(NULL AS CHAR(128)) AS EVALUATION_EDITION, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEFORE, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS CHAR(100)) AS COLLATION, CAST(NULL AS SIGNED) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM OCEANBASE.__ALL_VIRTUAL_TABLE WHERE TABLE_MODE >> 12 & 15 in (0,1)) T JOIN OCEANBASE.__ALL_VIRTUAL_DATABASE DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM OCEANBASE.__ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM OCEANBASE.__ALL_VIRTUAL_COLUMN) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN OCEANBASE.__ALL_VIRTUAL_COLUMN_STAT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 WHERE T.TABLE_TYPE IN (0,1,3,4,5,6,7,8,9,14,15) )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT/*+leading(DB,TC,STAT)*/ CAST(DB.TENANT_ID AS SIGNED) AS CON_ID, CAST(DB.DATABASE_NAME AS CHAR(128)) AS OWNER, CAST(TC.TABLE_NAME AS CHAR(128)) AS TABLE_NAME, CAST(TC.COLUMN_NAME AS CHAR(128)) AS COLUMN_NAME, CAST(CASE TC.DATA_TYPE WHEN 0 THEN 'VARCHAR2' WHEN 1 THEN 'NUMBER' WHEN 2 THEN 'NUMBER' WHEN 3 THEN 'NUMBER' WHEN 4 THEN 'NUMBER' WHEN 5 THEN 'NUMBER' WHEN 6 THEN 'NUMBER' WHEN 7 THEN 'NUMBER' WHEN 8 THEN 'NUMBER' WHEN 9 THEN 'NUMBER' WHEN 10 THEN 'NUMBER' WHEN 11 THEN 'BINARY_FLOAT' WHEN 12 THEN 'BINARY_DOUBLE' WHEN 13 THEN 'NUMBER' WHEN 14 THEN 'NUMBER' WHEN 15 THEN 'NUMBER' WHEN 16 THEN 'NUMBER' WHEN 17 THEN 'DATE' WHEN 18 THEN 'TIMESTAMP' WHEN 19 THEN 'DATE' WHEN 20 THEN 'TIME' WHEN 21 THEN 'YEAR' WHEN 22 THEN 'VARCHAR2' WHEN 23 THEN 'CHAR' WHEN 24 THEN 'HEX_STRING' WHEN 25 THEN 'UNDEFINED' WHEN 26 THEN 'UNKNOWN' WHEN 27 THEN 'TINYTEXT' WHEN 28 THEN 'TEXT' WHEN 29 THEN 'MEDIUMTEXT' WHEN 30 THEN (CASE TC.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 31 THEN 'BIT' WHEN 32 THEN 'ENUM' WHEN 33 THEN 'SET' WHEN 34 THEN 'ENUM_INNER' WHEN 35 THEN 'SET_INNER' WHEN 36 THEN CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')) WHEN 37 THEN CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')) WHEN 38 THEN CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')) WHEN 39 THEN 'RAW' WHEN 40 THEN CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')) WHEN 41 THEN CONCAT('INTERVAL DAY(', CONCAT(FLOOR(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))) WHEN 42 THEN 'FLOAT' WHEN 43 THEN 'NVARCHAR2' WHEN 44 THEN 'NCHAR' WHEN 45 THEN 'UROWID' WHEN 46 THEN (CASE TC.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 47 THEN 'JSON' WHEN 50 THEN 'NUMBER' ELSE 'UNDEFINED' END AS CHAR(128)) AS DATA_TYPE, CAST(NULL AS CHAR(3)) AS DATA_TYPE_MOD, CAST(NULL AS CHAR(128)) AS DATA_TYPE_OWNER, CAST(TC.DATA_LENGTH * CASE WHEN TC.DATA_TYPE IN (22,23,30,43,44,46) AND TC.DATA_PRECISION = 1 THEN (CASE TC.COLLATION_TYPE WHEN 63 THEN 1 WHEN 249 THEN 4 WHEN 248 THEN 4 WHEN 87 THEN 2 WHEN 28 THEN 2 WHEN 55 THEN 4 WHEN 54 THEN 4 WHEN 101 THEN 2 WHEN 46 THEN 4 WHEN 45 THEN 4 WHEN 224 THEN 4 ELSE 1 END) ELSE 1 END AS SIGNED) AS DATA_LENGTH, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS SIGNED) AS DATA_PRECISION, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS SIGNED) AS DATA_SCALE, CAST((CASE WHEN TC.NULLABLE = 0 THEN 'N' WHEN (TC.COLUMN_FLAGS & (5 * POWER(2, 13))) = 5 * POWER(2, 13) THEN 'N' ELSE 'Y' END) AS CHAR(1)) AS NULLABLE, CAST(CASE WHEN (TC.COLUMN_FLAGS & 64) = 0 THEN TC.COLUMN_ID ELSE NULL END AS SIGNED) AS COLUMN_ID, CAST(LENGTH(TC.CUR_DEFAULT_VALUE_V2) AS SIGNED) AS DEFAULT_LENGTH, CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ CHAR(262144)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS SIGNED) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ CHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ CHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS SIGNED) AS DENSITY, CAST(STAT.NULL_CNT AS SIGNED) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS SIGNED) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS SIGNED) AS SAMPLE_SIZE, CAST(CASE TC.DATA_TYPE WHEN 22 THEN 'CHAR_CS' WHEN 23 THEN 'CHAR_CS' WHEN 30 THEN (CASE WHEN TC.COLLATION_TYPE = 63 THEN 'NULL' ELSE 'CHAR_CS' END) WHEN 43 THEN 'NCHAR_CS' WHEN 44 THEN 'NCHAR_CS' ELSE '' END AS CHAR(44)) AS CHARACTER_SET_NAME, CAST(NULL AS SIGNED) AS CHAR_COL_DECL_LENGTH, CAST(CASE STAT.GLOBAL_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS GLOBAL_STATS, CAST(CASE STAT.USER_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS USER_STATS, CAST(NULL AS CHAR(80)) AS NOTES, CAST(STAT.AVG_LEN AS SIGNED) AS AVG_COL_LEN, CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS SIGNED) AS CHAR_LENGTH, CAST(CASE TC.DATA_TYPE WHEN 22 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 23 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 43 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) WHEN 44 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) ELSE NULL END AS CHAR(1)) AS CHAR_USED, CAST(NULL AS CHAR(3)) AS V80_FMT_IMAGE, CAST(NULL AS CHAR(3)) AS DATA_UPGRADED, CAST(CASE WHEN (TC.COLUMN_FLAGS & 64) = 0 THEN 'NO' ELSE 'YES' END AS CHAR(3)) AS HIDDEN_COLUMN, CAST(CASE WHEN (TC.COLUMN_FLAGS & 1) = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS VIRTUAL_COLUMN, CAST(NULL AS SIGNED) AS SEGMENT_COLUMN_ID, CAST(NULL AS SIGNED) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS CHAR(15)) AS HISTOGRAM, CAST(TC.COLUMN_NAME AS CHAR(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS CHAR(3)) AS USER_GENERATED, CAST(NULL AS CHAR(3)) AS DEFAULT_ON_NULL, CAST(NULL AS CHAR(3)) AS IDENTITY_COLUMN, CAST(NULL AS CHAR(128)) AS EVALUATION_EDITION, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEFORE, CAST(NULL AS CHAR(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS CHAR(100)) AS COLLATION, CAST(NULL AS SIGNED) AS COLLATED_COLUMN_ID FROM (SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE T JOIN OCEANBASE.__ALL_VIRTUAL_CORE_COLUMN_TABLE C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 UNION ALL SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM OCEANBASE.__ALL_VIRTUAL_TABLE T JOIN OCEANBASE.__ALL_VIRTUAL_COLUMN C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID WHERE TABLE_MODE >> 12 & 15 in (0,1) AND C.IS_HIDDEN = 0) TC JOIN OCEANBASE.__ALL_VIRTUAL_DATABASE DB ON DB.TENANT_ID = TC.TENANT_ID AND DB.DATABASE_ID = TC.DATABASE_ID LEFT JOIN OCEANBASE.__ALL_VIRTUAL_COLUMN_STAT STAT ON TC.TENANT_ID = STAT.TENANT_ID AND TC.TABLE_ID = STAT.TABLE_ID AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 WHERE TC.TABLE_TYPE IN (0,1,3,4,5,6,7,8,9,14,15) )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp index bcfd7418a2..7fa4b09295 100644 --- a/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp +++ b/src/share/inner_table/ob_inner_table_schema.21251_21300.cpp @@ -160,7 +160,7 @@ int ObInnerTableSchema::dba_tab_col_statistics_schema(ObTableSchema &table_schem table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT cast(db.database_name as CHAR(128)) as OWNER, cast(t.table_name as CHAR(128)) as TABLE_NAME, cast(c.column_name as CHAR(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as CHAR(128)) as LOW_VALUE, cast(stat.max_value as CHAR(128)) as HIGH_VALUE, cast(stat.density as NUMBER) as DENSITY, cast(stat.null_cnt as NUMBER) as NUM_NULLS, cast(stat.bucket_cnt as NUMBER) as NUM_BUCKETS, cast(stat.last_analyzed as DATETIME(6)) as LAST_ANALYZED, cast(stat.sample_size as NUMBER) as SAMPLE_SIZE, CAST((CASE stat.GLOBAL_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END) AS CHAR(3)) AS GLOBAL_STATS, CAST((CASE stat.USER_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END) AS CHAR(3)) AS USER_STATS, cast(NULL as CHAR(80)) as NOTES, cast(stat.avg_len as NUMBER) as AVG_COL_LEN, cast((case when stat.histogram_type = 1 then 'FREQUENCY' when stat.histogram_type = 3 then 'TOP-FREQUENCY' when stat.histogram_type = 4 then 'HYBRID' else NULL end) as CHAR(15)) as HISTOGRAM, cast(NULL as CHAR(7)) SCOPE FROM (SELECT CAST(0 AS SIGNED) AS TENANT_ID, DATABASE_ID, TABLE_ID, TABLE_NAME FROM oceanbase.__all_virtual_core_all_table WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID, database_id, table_id, table_name FROM oceanbase.__all_table where table_type in (0,2,3,6,14) and table_mode >> 12 & 15 in (0,1)) t JOIN oceanbase.__all_database db ON db.tenant_id = t.tenant_id AND db.database_id = t.database_id and t.tenant_id = 0 JOIN (SELECT CAST(0 AS SIGNED) AS TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, IS_HIDDEN FROM oceanbase.__all_virtual_core_column_table WHERE TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, IS_HIDDEN FROM oceanbase.__all_column) c ON c.tenant_id = t.tenant_id AND c.table_id = t.table_id left join oceanbase.__all_column_stat stat ON c.table_id = stat.table_id AND c.column_id = stat.column_id AND stat.object_type = 1 WHERE c.is_hidden = 0 )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(SELECT cast(db.database_name as CHAR(128)) as OWNER, cast(tc.table_name as CHAR(128)) as TABLE_NAME, cast(tc.column_name as CHAR(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as CHAR(128)) as LOW_VALUE, cast(stat.max_value as CHAR(128)) as HIGH_VALUE, cast(stat.density as NUMBER) as DENSITY, cast(stat.null_cnt as NUMBER) as NUM_NULLS, cast(stat.bucket_cnt as NUMBER) as NUM_BUCKETS, cast(stat.last_analyzed as DATETIME(6)) as LAST_ANALYZED, cast(stat.sample_size as NUMBER) as SAMPLE_SIZE, CAST((CASE stat.GLOBAL_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END) AS CHAR(3)) AS GLOBAL_STATS, CAST((CASE stat.USER_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END) AS CHAR(3)) AS USER_STATS, cast(NULL as CHAR(80)) as NOTES, cast(stat.avg_len as NUMBER) as AVG_COL_LEN, cast((case when stat.histogram_type = 1 then 'FREQUENCY' when stat.histogram_type = 3 then 'TOP-FREQUENCY' when stat.histogram_type = 4 then 'HYBRID' else NULL end) as CHAR(15)) as HISTOGRAM, cast(NULL as CHAR(7)) SCOPE FROM (SELECT CAST(0 AS SIGNED) AS TENANT_ID, t.DATABASE_ID, t.TABLE_ID, t.TABLE_NAME, c.COLUMN_ID, c.COLUMN_NAME, c.IS_HIDDEN FROM oceanbase.__all_virtual_core_all_table t, oceanbase.__all_virtual_core_column_table c WHERE t.TENANT_ID = EFFECTIVE_TENANT_ID() and c.TENANT_ID = EFFECTIVE_TENANT_ID() and c.tenant_id = t.tenant_id AND c.table_id = t.table_id UNION ALL SELECT t.TENANT_ID, t.database_id, t.table_id, t.table_name, c.COLUMN_ID, c.COLUMN_NAME, c.IS_HIDDEN FROM oceanbase.__all_table t, oceanbase.__all_column c where t.table_type in (0,2,3,6,14) and t.table_mode >> 12 & 15 in (0,1) and c.tenant_id = t.tenant_id and c.table_id = t.table_id) tc JOIN oceanbase.__all_database db ON db.tenant_id = tc.tenant_id AND db.database_id = tc.database_id and tc.tenant_id = 0 left join oceanbase.__all_column_stat stat ON tc.table_id = stat.table_id AND tc.column_id = stat.column_id AND stat.object_type = 1 WHERE tc.is_hidden = 0 )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp b/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp index f12e142bf4..d2f778b94f 100644 --- a/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp +++ b/src/share/inner_table/ob_inner_table_schema.25001_25050.cpp @@ -910,7 +910,7 @@ int ObInnerTableSchema::all_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', 49, DECODE(C.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND (T.DATABASE_ID = USERENV('SCHEMAID') OR USER_CAN_ACCESS_OBJ(1, T.TABLE_ID, T.DATABASE_ID) = 1) JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, SUB_DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, SUB_DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(TC.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(TC.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(TC.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(TC.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', 49, DECODE(TC.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN TC.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 WHEN TC.DATA_TYPE = 11 THEN 4 WHEN TC.DATA_TYPE = 12 THEN 8 WHEN TC.DATA_TYPE in (17, 19) THEN 7 WHEN TC.DATA_TYPE in (18, 37, 38) THEN CASE WHEN TC.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN TC.DATA_TYPE = 41 THEN 11 WHEN TC.DATA_TYPE = 40 THEN 5 WHEN TC.DATA_TYPE = 30 THEN 4000 WHEN TC.DATA_TYPE = 36 THEN 13 WHEN TC.DATA_TYPE IN (0,22,43,46) AND TC.DATA_PRECISION = 1 THEN LEAST(32767, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN TC.DATA_TYPE IN (23,44) AND TC.DATA_PRECISION = 1 THEN LEAST(2000, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE TC.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(TC.NULLABLE, 0, 'N', DECODE(BITAND(TC.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, TC.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(TC.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(TC.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(TC.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(TC.DATA_TYPE, 22, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(TC.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.SUB_DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C WHERE C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 UNION ALL SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.SUB_DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND C.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) AND bitand((T.TABLE_MODE / 4096), 15) IN (0,1) AND C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = TC.TENANT_ID AND DB.DATABASE_ID = TC.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND (TC.DATABASE_ID = USERENV('SCHEMAID') OR USER_CAN_ACCESS_OBJ(1, TC.TABLE_ID, TC.DATABASE_ID) = 1) LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON TC.TENANT_ID = STAT.TENANT_ID AND TC.TABLE_ID = STAT.TABLE_ID AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -960,7 +960,7 @@ int ObInnerTableSchema::dba_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', 49, DECODE(C.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, SUB_DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, SUB_DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, CAST(TC.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(TC.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(TC.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(TC.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', 49, DECODE(TC.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN TC.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 WHEN TC.DATA_TYPE = 11 THEN 4 WHEN TC.DATA_TYPE = 12 THEN 8 WHEN TC.DATA_TYPE in (17, 19) THEN 7 WHEN TC.DATA_TYPE in (18, 37, 38) THEN CASE WHEN TC.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN TC.DATA_TYPE = 41 THEN 11 WHEN TC.DATA_TYPE = 40 THEN 5 WHEN TC.DATA_TYPE = 30 THEN 4000 WHEN TC.DATA_TYPE = 36 THEN 13 WHEN TC.DATA_TYPE IN (0,22,43,46) AND TC.DATA_PRECISION = 1 THEN LEAST(32767, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN TC.DATA_TYPE IN (23,44) AND TC.DATA_PRECISION = 1 THEN LEAST(2000, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE TC.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(TC.NULLABLE, 0, 'N', DECODE(BITAND(TC.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, TC.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(TC.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(TC.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(TC.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(TC.DATA_TYPE, 22, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(TC.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.SUB_DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C WHERE C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 UNION ALL SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.SUB_DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND C.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) AND bitand((T.TABLE_MODE / 4096), 15) IN (0,1) AND C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = TC.TENANT_ID AND DB.DATABASE_ID = TC.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON TC.TENANT_ID = STAT.TENANT_ID AND TC.TABLE_ID = STAT.TABLE_ID AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1010,7 +1010,7 @@ int ObInnerTableSchema::user_tab_cols_v_schema(ObTableSchema &table_schema) table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(C.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', 49, DECODE(C.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 WHEN C.DATA_TYPE = 11 THEN 4 WHEN C.DATA_TYPE = 12 THEN 8 WHEN C.DATA_TYPE in (17, 19) THEN 7 WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN C.DATA_TYPE = 41 THEN 11 WHEN C.DATA_TYPE = 40 THEN 5 WHEN C.DATA_TYPE = 30 THEN 4000 WHEN C.DATA_TYPE = 36 THEN 13 WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(C.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(C.DATA_TYPE, 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, DATABASE_ID, TABLE_NAME, TABLE_TYPE FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID() AND TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) T JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = T.TENANT_ID AND DB.DATABASE_ID = T.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.DATABASE_ID = USERENV('SCHEMAID') JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, SUB_DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, DATA_TYPE, SUB_DATA_TYPE, COLLATION_TYPE, DATA_SCALE, DATA_LENGTH, DATA_PRECISION, NULLABLE, COLUMN_FLAGS, CUR_DEFAULT_VALUE_V2, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C ON C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON C.TENANT_ID = STAT.TENANT_ID AND C.TABLE_ID = STAT.TABLE_ID AND C.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__( SELECT CAST(TC.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, CAST(TC.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, CAST(DECODE(TC.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', 2, 'NUMBER', 3, 'NUMBER', 4, 'NUMBER', 5, 'NUMBER', 6, 'NUMBER', 7, 'NUMBER', 8, 'NUMBER', 9, 'NUMBER', 10, 'NUMBER', 11, 'BINARY_FLOAT', 12, 'BINARY_DOUBLE', 13, 'NUMBER', 14, 'NUMBER', 15, 'NUMBER', 16, 'NUMBER', 17, 'DATE', 18, 'TIMESTAMP', 19, 'DATE', 20, 'TIME', 21, 'YEAR', 22, 'VARCHAR2', 23, 'CHAR', 24, 'HEX_STRING', 25, 'UNDEFINED', 26, 'UNKNOWN', 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', 30, DECODE(TC.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', 36, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')), 37, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')), 38, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')), 39, 'RAW', 40, CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')), 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', 45, 'UROWID', 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', 49, DECODE(TC.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, CAST(CASE WHEN TC.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 WHEN TC.DATA_TYPE = 11 THEN 4 WHEN TC.DATA_TYPE = 12 THEN 8 WHEN TC.DATA_TYPE in (17, 19) THEN 7 WHEN TC.DATA_TYPE in (18, 37, 38) THEN CASE WHEN TC.DATA_SCALE = 0 THEN 7 ELSE 11 END WHEN TC.DATA_TYPE = 41 THEN 11 WHEN TC.DATA_TYPE = 40 THEN 5 WHEN TC.DATA_TYPE = 30 THEN 4000 WHEN TC.DATA_TYPE = 36 THEN 13 WHEN TC.DATA_TYPE IN (0,22,43,46) AND TC.DATA_PRECISION = 1 THEN LEAST(32767, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) WHEN TC.DATA_TYPE IN (23,44) AND TC.DATA_PRECISION = 1 THEN LEAST(2000, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) ELSE TC.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, CAST(DECODE(TC.NULLABLE, 0, 'N', DECODE(BITAND(TC.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, TC.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, CAST(LENGTHB(TC.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, CAST(STAT.DENSITY AS NUMBER) AS DENSITY, CAST(STAT.NULL_CNT AS NUMBER) AS NUM_NULLS, CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, CAST(DECODE(TC.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', 30, DECODE(TC.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, CAST(NULL AS NUMBER) AS CHAR_COL_DECL_LENGTH, CAST(DECODE(STAT.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, CAST(DECODE(TC.DATA_TYPE, 22, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 23, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 43, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), 44, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, CAST(TC.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, CAST(NULL AS VARCHAR2(128)) AS EVALUATION_EDITION, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEFORE, CAST(NULL AS VARCHAR2(128)) AS UNUSABLE_BEGINNING, CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM (SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.SUB_DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C WHERE C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0 UNION ALL SELECT T.TENANT_ID, T.TABLE_ID, T.DATABASE_ID, T.TABLE_NAME, T.TABLE_TYPE, C.COLUMN_ID, C.COLUMN_NAME, C.DATA_TYPE, C.SUB_DATA_TYPE, C.COLLATION_TYPE, C.DATA_SCALE, C.DATA_LENGTH, C.DATA_PRECISION, C.NULLABLE, C.COLUMN_FLAGS, C.CUR_DEFAULT_VALUE_V2 FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() AND C.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) AND bitand((T.TABLE_MODE / 4096), 15) IN (0,1) AND C.TENANT_ID = T.TENANT_ID AND C.TABLE_ID = T.TABLE_ID AND C.IS_HIDDEN = 0) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB ON DB.TENANT_ID = TC.TENANT_ID AND DB.DATABASE_ID = TC.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() AND TC.DATABASE_ID = USERENV('SCHEMAID') LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT ON TC.TENANT_ID = STAT.TENANT_ID AND TC.TABLE_ID = STAT.TABLE_ID AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp b/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp index 3dbd53c2a8..fe29916f25 100644 --- a/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp +++ b/src/share/inner_table/ob_inner_table_schema.28051_28100.cpp @@ -1060,7 +1060,7 @@ int ObInnerTableSchema::all_tab_col_statistics_ora_schema(ObTableSchema &table_s table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(select cast(db.database_name as VARCHAR2(128)) as OWNER, cast(t.table_name as VARCHAR2(128)) as TABLE_NAME, cast(c.column_name as VARCHAR2(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as varchar(128)) as LOW_VALUE, cast(stat.max_value as varchar(128)) as HIGH_VALUE, cast(stat.density as NUMBER) as DENSITY, cast(stat.null_cnt as NUMBER) as NUM_NULLS, cast(stat.bucket_cnt as NUMBER) as NUM_BUCKETS, cast(stat.last_analyzed as DATE) as LAST_ANALYZED, cast(stat.sample_size as NUMBER) as SAMPLE_SIZE, CAST(decode(stat.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(decode(stat.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, cast(NULL as VARCHAR2(80)) as NOTES, cast(stat.avg_len as NUMBER) as AVG_COL_LEN, cast((case when stat.histogram_type = 1 then 'FREQUENCY' when stat.histogram_type = 3 then 'TOP-FREQUENCY' when stat.histogram_type = 4 then 'HYBRID' else NULL end) as VARCHAR2(15)) as HISTOGRAM, cast(NULL as VARCHAR2(7)) SCOPE FROM (SELECT TENANT_ID, DATABASE_ID, TABLE_ID, TABLE_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, DATABASE_ID, TABLE_ID, TABLE_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE table_type in (0,2,3,8,9,14) AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) t JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT db ON db.tenant_id = t.tenant_id AND db.database_id = t.database_id AND (t.database_id = userenv('SCHEMAID') OR user_can_access_obj(1, t.table_id, t.database_id) = 1) AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) c ON c.tenant_id = t.tenant_id AND c.table_id = t.table_id LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT stat ON c.table_id = stat.table_id AND c.column_id = stat.column_id AND stat.object_type = 1 WHERE c.is_hidden = 0; )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(select cast(db.database_name as VARCHAR2(128)) as OWNER, cast(TC.table_name as VARCHAR2(128)) as TABLE_NAME, cast(TC.column_name as VARCHAR2(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as varchar(128)) as LOW_VALUE, cast(stat.max_value as varchar(128)) as HIGH_VALUE, cast(stat.density as NUMBER) as DENSITY, cast(stat.null_cnt as NUMBER) as NUM_NULLS, cast(stat.bucket_cnt as NUMBER) as NUM_BUCKETS, cast(stat.last_analyzed as DATE) as LAST_ANALYZED, cast(stat.sample_size as NUMBER) as SAMPLE_SIZE, CAST(decode(stat.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(decode(stat.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, cast(NULL as VARCHAR2(80)) as NOTES, cast(stat.avg_len as NUMBER) as AVG_COL_LEN, cast((case when stat.histogram_type = 1 then 'FREQUENCY' when stat.histogram_type = 3 then 'TOP-FREQUENCY' when stat.histogram_type = 4 then 'HYBRID' else NULL end) as VARCHAR2(15)) as HISTOGRAM, cast(NULL as VARCHAR2(7)) SCOPE FROM (SELECT T.TENANT_ID, T.DATABASE_ID, T.TABLE_ID, T.TABLE_NAME, C.COLUMN_ID, C.COLUMN_NAME, C.IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C WHERE C.tenant_id = T.tenant_id AND C.table_id = T.table_id AND T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT T.TENANT_ID, T.DATABASE_ID, T.TABLE_ID, T.TABLE_NAME, C.COLUMN_ID, C.COLUMN_NAME, C.IS_HIDDEN FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C WHERE table_type in (0,2,3,8,9,14) AND bitand((TABLE_MODE / 4096), 15) IN (0,1) AND C.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND C.tenant_id = T.tenant_id AND C.table_id = T.table_id) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT db ON db.tenant_id = TC.tenant_id AND db.database_id = TC.database_id AND (TC.database_id = userenv('SCHEMAID') OR user_can_access_obj(1, TC.table_id, TC.database_id) = 1) AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT stat ON TC.table_id = stat.table_id AND TC.column_id = stat.column_id AND stat.object_type = 1 WHERE TC.is_hidden = 0; )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } @@ -1110,7 +1110,7 @@ int ObInnerTableSchema::dba_tab_col_statistics_ora_schema(ObTableSchema &table_s table_schema.set_collation_type(ObCharset::get_default_collation(ObCharset::get_default_charset())); if (OB_SUCC(ret)) { - if (OB_FAIL(table_schema.set_view_definition(R"__(select cast(db.database_name as VARCHAR2(128)) as OWNER, cast(t.table_name as VARCHAR2(128)) as TABLE_NAME, cast(c.column_name as VARCHAR2(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as varchar(128)) as LOW_VALUE, cast(stat.max_value as varchar(128)) as HIGH_VALUE, cast(stat.density as NUMBER) as DENSITY, cast(stat.null_cnt as NUMBER) as NUM_NULLS, cast(stat.bucket_cnt as NUMBER) as NUM_BUCKETS, cast(stat.last_analyzed as DATE) as LAST_ANALYZED, cast(stat.sample_size as NUMBER) as SAMPLE_SIZE, CAST(decode(stat.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(decode(stat.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, cast(NULL as VARCHAR2(80)) as NOTES, cast(stat.avg_len as NUMBER) as AVG_COL_LEN, cast((case when stat.histogram_type = 1 then 'FREQUENCY' when stat.histogram_type = 3 then 'TOP-FREQUENCY' when stat.histogram_type = 4 then 'HYBRID' else NULL end) as VARCHAR2(15)) as HISTOGRAM, cast(NULL as VARCHAR2(7)) SCOPE FROM (SELECT TENANT_ID, DATABASE_ID, TABLE_ID, TABLE_NAME FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE UNION ALL SELECT TENANT_ID, DATABASE_ID, TABLE_ID, TABLE_NAME FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT WHERE table_type in (0,2,3,8,9,14) AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) t JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT db ON db.tenant_id = t.tenant_id AND db.database_id = t.database_id AND t.TENANT_ID = EFFECTIVE_TENANT_ID() AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() JOIN (SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE UNION ALL SELECT TENANT_ID, TABLE_ID, COLUMN_ID, COLUMN_NAME, IS_HIDDEN FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) c ON c.tenant_id = t.tenant_id AND c.table_id = t.table_id LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT stat ON c.table_id = stat.table_id AND c.column_id = stat.column_id AND stat.object_type = 1 WHERE c.is_hidden = 0; )__"))) { + if (OB_FAIL(table_schema.set_view_definition(R"__(select cast(db.database_name as VARCHAR2(128)) as OWNER, cast(TC.table_name as VARCHAR2(128)) as TABLE_NAME, cast(TC.column_name as VARCHAR2(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as varchar(128)) as LOW_VALUE, cast(stat.max_value as varchar(128)) as HIGH_VALUE, cast(stat.density as NUMBER) as DENSITY, cast(stat.null_cnt as NUMBER) as NUM_NULLS, cast(stat.bucket_cnt as NUMBER) as NUM_BUCKETS, cast(stat.last_analyzed as DATE) as LAST_ANALYZED, cast(stat.sample_size as NUMBER) as SAMPLE_SIZE, CAST(decode(stat.GLOBAL_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS GLOBAL_STATS, CAST(decode(stat.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, cast(NULL as VARCHAR2(80)) as NOTES, cast(stat.avg_len as NUMBER) as AVG_COL_LEN, cast((case when stat.histogram_type = 1 then 'FREQUENCY' when stat.histogram_type = 3 then 'TOP-FREQUENCY' when stat.histogram_type = 4 then 'HYBRID' else NULL end) as VARCHAR2(15)) as HISTOGRAM, cast(NULL as VARCHAR2(7)) SCOPE FROM (SELECT T.TENANT_ID, T.DATABASE_ID, T.TABLE_ID, T.TABLE_NAME, C.COLUMN_ID, C.COLUMN_NAME, C.IS_HIDDEN FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C WHERE C.tenant_id = T.tenant_id AND C.table_id = T.table_id AND T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL SELECT T.TENANT_ID, T.DATABASE_ID, T.TABLE_ID, T.TABLE_NAME, C.COLUMN_ID, C.COLUMN_NAME, C.IS_HIDDEN FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C WHERE table_type in (0,2,3,8,9,14) AND bitand((TABLE_MODE / 4096), 15) IN (0,1) AND C.TENANT_ID = EFFECTIVE_TENANT_ID() AND T.TENANT_ID = EFFECTIVE_TENANT_ID() AND C.tenant_id = T.tenant_id AND C.table_id = T.table_id) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT db ON db.tenant_id = TC.tenant_id AND db.database_id = TC.database_id AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT stat ON TC.table_id = stat.table_id AND TC.column_id = stat.column_id AND stat.object_type = 1 WHERE TC.is_hidden = 0; )__"))) { LOG_ERROR("fail to set view_definition", K(ret)); } } diff --git a/src/share/inner_table/ob_inner_table_schema_def.py b/src/share/inner_table/ob_inner_table_schema_def.py index be16d49bb3..66147a8724 100644 --- a/src/share/inner_table/ob_inner_table_schema_def.py +++ b/src/share/inner_table/ob_inner_table_schema_def.py @@ -19305,12 +19305,12 @@ def_table_schema( normal_columns = [], gm_columns = [], view_definition = """ -SELECT/*+leading(DB,T,C,STAT)*/ +SELECT/*+leading(DB,TC,STAT)*/ CAST(DB.TENANT_ID AS SIGNED) AS CON_ID, CAST(DB.DATABASE_NAME AS CHAR(128)) AS OWNER, - CAST(T.TABLE_NAME AS CHAR(128)) AS TABLE_NAME, - CAST(C.COLUMN_NAME AS CHAR(128)) AS COLUMN_NAME, - CAST(CASE C.DATA_TYPE + CAST(TC.TABLE_NAME AS CHAR(128)) AS TABLE_NAME, + CAST(TC.COLUMN_NAME AS CHAR(128)) AS COLUMN_NAME, + CAST(CASE TC.DATA_TYPE WHEN 0 THEN 'VARCHAR2' WHEN 1 THEN 'NUMBER' @@ -19350,30 +19350,30 @@ SELECT/*+leading(DB,T,C,STAT)*/ WHEN 27 THEN 'TINYTEXT' WHEN 28 THEN 'TEXT' WHEN 29 THEN 'MEDIUMTEXT' - WHEN 30 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) + WHEN 30 THEN (CASE TC.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 31 THEN 'BIT' WHEN 32 THEN 'ENUM' WHEN 33 THEN 'SET' WHEN 34 THEN 'ENUM_INNER' WHEN 35 THEN 'SET_INNER' - WHEN 36 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')) - WHEN 37 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')) - WHEN 38 THEN CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')) + WHEN 36 THEN CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')) + WHEN 37 THEN CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')) + WHEN 38 THEN CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')) WHEN 39 THEN 'RAW' - WHEN 40 THEN CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')) - WHEN 41 THEN CONCAT('INTERVAL DAY(', CONCAT(FLOOR(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))) + WHEN 40 THEN CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')) + WHEN 41 THEN CONCAT('INTERVAL DAY(', CONCAT(FLOOR(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))) WHEN 42 THEN 'FLOAT' WHEN 43 THEN 'NVARCHAR2' WHEN 44 THEN 'NCHAR' WHEN 45 THEN 'UROWID' - WHEN 46 THEN (CASE C.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) + WHEN 46 THEN (CASE TC.COLLATION_TYPE WHEN 63 THEN 'BLOB' ELSE 'CLOB' END) WHEN 47 THEN 'JSON' WHEN 50 THEN 'NUMBER' ELSE 'UNDEFINED' END AS CHAR(128)) AS DATA_TYPE, CAST(NULL AS CHAR(3)) AS DATA_TYPE_MOD, CAST(NULL AS CHAR(128)) AS DATA_TYPE_OWNER, - CAST(C.DATA_LENGTH * CASE WHEN C.DATA_TYPE IN (22,23,30,43,44,46) AND C.DATA_PRECISION = 1 - THEN (CASE C.COLLATION_TYPE + CAST(TC.DATA_LENGTH * CASE WHEN TC.DATA_TYPE IN (22,23,30,43,44,46) AND TC.DATA_PRECISION = 1 + THEN (CASE TC.COLLATION_TYPE WHEN 63 THEN 1 WHEN 249 THEN 4 WHEN 248 THEN 4 @@ -19388,21 +19388,21 @@ SELECT/*+leading(DB,T,C,STAT)*/ ELSE 1 END) ELSE 1 END AS SIGNED) AS DATA_LENGTH, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL - ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END + ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS SIGNED) AS DATA_PRECISION, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL - ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END + ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS SIGNED) AS DATA_SCALE, CAST((CASE - WHEN C.NULLABLE = 0 THEN 'N' - WHEN (C.COLUMN_FLAGS & (5 * POWER(2, 13))) = 5 * POWER(2, 13) THEN 'N' + WHEN TC.NULLABLE = 0 THEN 'N' + WHEN (TC.COLUMN_FLAGS & (5 * POWER(2, 13))) = 5 * POWER(2, 13) THEN 'N' ELSE 'Y' END) AS CHAR(1)) AS NULLABLE, - CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN C.COLUMN_ID ELSE NULL END AS SIGNED) AS COLUMN_ID, - CAST(LENGTH(C.CUR_DEFAULT_VALUE_V2) AS SIGNED) AS DEFAULT_LENGTH, - CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ CHAR(262144)) AS DATA_DEFAULT, + CAST(CASE WHEN (TC.COLUMN_FLAGS & 64) = 0 THEN TC.COLUMN_ID ELSE NULL END AS SIGNED) AS COLUMN_ID, + CAST(LENGTH(TC.CUR_DEFAULT_VALUE_V2) AS SIGNED) AS DEFAULT_LENGTH, + CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ CHAR(262144)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS SIGNED) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ CHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ CHAR(128)) AS HIGH_VALUE, @@ -19411,10 +19411,10 @@ SELECT/*+leading(DB,T,C,STAT)*/ CAST(STAT.BUCKET_CNT AS SIGNED) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS SIGNED) AS SAMPLE_SIZE, - CAST(CASE C.DATA_TYPE + CAST(CASE TC.DATA_TYPE WHEN 22 THEN 'CHAR_CS' WHEN 23 THEN 'CHAR_CS' - WHEN 30 THEN (CASE WHEN C.COLLATION_TYPE = 63 THEN 'NULL' ELSE 'CHAR_CS' END) + WHEN 30 THEN (CASE WHEN TC.COLLATION_TYPE = 63 THEN 'NULL' ELSE 'CHAR_CS' END) WHEN 43 THEN 'NCHAR_CS' WHEN 44 THEN 'NCHAR_CS' ELSE '' END AS CHAR(44)) AS CHARACTER_SET_NAME, @@ -19423,24 +19423,24 @@ SELECT/*+leading(DB,T,C,STAT)*/ CAST(CASE STAT.USER_STATS WHEN 0 THEN 'NO' WHEN 1 THEN 'YES' ELSE NULL END AS CHAR(3)) AS USER_STATS, CAST(NULL AS CHAR(80)) AS NOTES, CAST(STAT.AVG_LEN AS SIGNED) AS AVG_COL_LEN, - CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS SIGNED) AS CHAR_LENGTH, - CAST(CASE C.DATA_TYPE - WHEN 22 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) - WHEN 23 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) - WHEN 43 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) - WHEN 44 THEN (CASE WHEN C.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) + CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS SIGNED) AS CHAR_LENGTH, + CAST(CASE TC.DATA_TYPE + WHEN 22 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) + WHEN 23 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) + WHEN 43 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) + WHEN 44 THEN (CASE WHEN TC.DATA_PRECISION = 1 THEN 'C' ELSE 'B' END) ELSE NULL END AS CHAR(1)) AS CHAR_USED, CAST(NULL AS CHAR(3)) AS V80_FMT_IMAGE, CAST(NULL AS CHAR(3)) AS DATA_UPGRADED, - CAST(CASE WHEN (C.COLUMN_FLAGS & 64) = 0 THEN 'NO' ELSE 'YES' END AS CHAR(3)) AS HIDDEN_COLUMN, - CAST(CASE WHEN (C.COLUMN_FLAGS & 1) = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS VIRTUAL_COLUMN, + CAST(CASE WHEN (TC.COLUMN_FLAGS & 64) = 0 THEN 'NO' ELSE 'YES' END AS CHAR(3)) AS HIDDEN_COLUMN, + CAST(CASE WHEN (TC.COLUMN_FLAGS & 1) = 1 THEN 'YES' ELSE 'NO' END AS CHAR(3)) AS VIRTUAL_COLUMN, CAST(NULL AS SIGNED) AS SEGMENT_COLUMN_ID, CAST(NULL AS SIGNED) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS CHAR(15)) AS HISTOGRAM, - CAST(C.COLUMN_NAME AS CHAR(4000)) AS QUALIFIED_COL_NAME, + CAST(TC.COLUMN_NAME AS CHAR(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS CHAR(3)) AS USER_GENERATED, CAST(NULL AS CHAR(3)) AS DEFAULT_ON_NULL, CAST(NULL AS CHAR(3)) AS IDENTITY_COLUMN, @@ -19450,72 +19450,62 @@ SELECT/*+leading(DB,T,C,STAT)*/ CAST(NULL AS CHAR(100)) AS COLLATION, CAST(NULL AS SIGNED) AS COLLATED_COLUMN_ID FROM - (SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE + (SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM OCEANBASE.__ALL_VIRTUAL_CORE_ALL_TABLE T + JOIN OCEANBASE.__ALL_VIRTUAL_CORE_COLUMN_TABLE C + ON C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + AND C.IS_HIDDEN = 0 UNION ALL - SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM OCEANBASE.__ALL_VIRTUAL_TABLE - WHERE TABLE_MODE >> 12 & 15 in (0,1)) T + SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM OCEANBASE.__ALL_VIRTUAL_TABLE T + JOIN OCEANBASE.__ALL_VIRTUAL_COLUMN C + ON C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + WHERE TABLE_MODE >> 12 & 15 in (0,1) + AND C.IS_HIDDEN = 0) TC JOIN OCEANBASE.__ALL_VIRTUAL_DATABASE DB ON - DB.TENANT_ID = T.TENANT_ID - AND DB.DATABASE_ID = T.DATABASE_ID - - JOIN - (SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM OCEANBASE.__ALL_VIRTUAL_CORE_COLUMN_TABLE - - UNION ALL - - SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM OCEANBASE.__ALL_VIRTUAL_COLUMN) C - ON - C.TENANT_ID = T.TENANT_ID - AND C.TABLE_ID = T.TABLE_ID - AND C.IS_HIDDEN = 0 - + DB.TENANT_ID = TC.TENANT_ID + AND DB.DATABASE_ID = TC.DATABASE_ID LEFT JOIN OCEANBASE.__ALL_VIRTUAL_COLUMN_STAT STAT ON - C.TENANT_ID = STAT.TENANT_ID - AND C.TABLE_ID = STAT.TABLE_ID - AND C.COLUMN_ID = STAT.COLUMN_ID + TC.TENANT_ID = STAT.TENANT_ID + AND TC.TABLE_ID = STAT.TABLE_ID + AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 WHERE - T.TABLE_TYPE IN (0,1,3,4,5,6,7,8,9,14,15) + TC.TABLE_TYPE IN (0,1,3,4,5,6,7,8,9,14,15) """.replace("\n", " ") ) @@ -23029,8 +23019,8 @@ def_table_schema( in_tenant_space = True, view_definition = """SELECT cast(db.database_name as CHAR(128)) as OWNER, - cast(t.table_name as CHAR(128)) as TABLE_NAME, - cast(c.column_name as CHAR(128)) as COLUMN_NAME, + cast(tc.table_name as CHAR(128)) as TABLE_NAME, + cast(tc.column_name as CHAR(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as CHAR(128)) as LOW_VALUE, cast(stat.max_value as CHAR(128)) as HIGH_VALUE, @@ -23050,48 +23040,45 @@ def_table_schema( cast(NULL as CHAR(7)) SCOPE FROM (SELECT CAST(0 AS SIGNED) AS TENANT_ID, - DATABASE_ID, - TABLE_ID, - TABLE_NAME + t.DATABASE_ID, + t.TABLE_ID, + t.TABLE_NAME, + c.COLUMN_ID, + c.COLUMN_NAME, + c.IS_HIDDEN FROM - oceanbase.__all_virtual_core_all_table - WHERE TENANT_ID = EFFECTIVE_TENANT_ID() + oceanbase.__all_virtual_core_all_table t, + oceanbase.__all_virtual_core_column_table c + WHERE t.TENANT_ID = EFFECTIVE_TENANT_ID() + and c.TENANT_ID = EFFECTIVE_TENANT_ID() + and c.tenant_id = t.tenant_id + AND c.table_id = t.table_id UNION ALL - SELECT TENANT_ID, - database_id, - table_id, - table_name - FROM oceanbase.__all_table where table_type in (0,2,3,6,14) - and table_mode >> 12 & 15 in (0,1)) t + SELECT t.TENANT_ID, + t.database_id, + t.table_id, + t.table_name, + c.COLUMN_ID, + c.COLUMN_NAME, + c.IS_HIDDEN + FROM oceanbase.__all_table t, + oceanbase.__all_column c + where t.table_type in (0,2,3,6,14) + and t.table_mode >> 12 & 15 in (0,1) + and c.tenant_id = t.tenant_id + and c.table_id = t.table_id) tc JOIN oceanbase.__all_database db - ON db.tenant_id = t.tenant_id - AND db.database_id = t.database_id - and t.tenant_id = 0 - JOIN - (SELECT CAST(0 AS SIGNED) AS TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - IS_HIDDEN - FROM oceanbase.__all_virtual_core_column_table - WHERE TENANT_ID = EFFECTIVE_TENANT_ID() - UNION ALL - SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - IS_HIDDEN - FROM oceanbase.__all_column) c - ON c.tenant_id = t.tenant_id - AND c.table_id = t.table_id + ON db.tenant_id = tc.tenant_id + AND db.database_id = tc.database_id + and tc.tenant_id = 0 left join oceanbase.__all_column_stat stat - ON c.table_id = stat.table_id - AND c.column_id = stat.column_id + ON tc.table_id = stat.table_id + AND tc.column_id = stat.column_id AND stat.object_type = 1 WHERE - c.is_hidden = 0 + tc.is_hidden = 0 """.replace("\n", " ") ) @@ -34484,9 +34471,9 @@ def_table_schema( view_definition = """ SELECT CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, - CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, - CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, - CAST(DECODE(C.DATA_TYPE, + CAST(TC.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, + CAST(TC.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, + CAST(DECODE(TC.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', @@ -34526,18 +34513,18 @@ SELECT 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', - 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), + 30, DECODE(TC.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', - 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), - 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), - 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), + 36, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')), + 37, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')), + 38, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')), 39, 'RAW', - 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), - 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), + 40, CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')), + 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', @@ -34545,35 +34532,35 @@ SELECT 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', - 49, DECODE(C.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), + 49, DECODE(TC.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, - CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 - WHEN C.DATA_TYPE = 11 THEN 4 - WHEN C.DATA_TYPE = 12 THEN 8 - WHEN C.DATA_TYPE in (17, 19) THEN 7 - WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END - WHEN C.DATA_TYPE = 41 THEN 11 - WHEN C.DATA_TYPE = 40 THEN 5 - WHEN C.DATA_TYPE = 30 THEN 4000 - WHEN C.DATA_TYPE = 36 THEN 13 - WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) - WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) - ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) + CAST(CASE WHEN TC.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 + WHEN TC.DATA_TYPE = 11 THEN 4 + WHEN TC.DATA_TYPE = 12 THEN 8 + WHEN TC.DATA_TYPE in (17, 19) THEN 7 + WHEN TC.DATA_TYPE in (18, 37, 38) THEN CASE WHEN TC.DATA_SCALE = 0 THEN 7 ELSE 11 END + WHEN TC.DATA_TYPE = 41 THEN 11 + WHEN TC.DATA_TYPE = 40 THEN 5 + WHEN TC.DATA_TYPE = 30 THEN 4000 + WHEN TC.DATA_TYPE = 36 THEN 13 + WHEN TC.DATA_TYPE IN (0,22,43,46) AND TC.DATA_PRECISION = 1 THEN LEAST(32767, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) + WHEN TC.DATA_TYPE IN (23,44) AND TC.DATA_PRECISION = 1 THEN LEAST(2000, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) + ELSE TC.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL - ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END + ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL - ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END + ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, - CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, - CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, - CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, + CAST(DECODE(TC.NULLABLE, 0, 'N', DECODE(BITAND(TC.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, TC.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, + CAST(LENGTHB(TC.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, + CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, @@ -34582,10 +34569,10 @@ SELECT CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, - CAST(DECODE(C.DATA_TYPE, + CAST(DECODE(TC.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', - 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), + 30, DECODE(TC.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, @@ -34594,24 +34581,24 @@ SELECT CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, - CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, - CAST(DECODE(C.DATA_TYPE, - 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), + CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, + CAST(DECODE(TC.DATA_TYPE, + 22, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 23, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 43, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 44, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, - CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, + CAST(TC.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, @@ -34621,72 +34608,65 @@ SELECT CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM - (SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE + (SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.SUB_DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, + SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C + WHERE C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + AND C.IS_HIDDEN = 0 UNION ALL - SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID() - AND TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) - AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) T + SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.SUB_DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, + SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C + WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() + AND C.TENANT_ID = EFFECTIVE_TENANT_ID() + AND T.TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) + AND bitand((T.TABLE_MODE / 4096), 15) IN (0,1) + AND C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + AND C.IS_HIDDEN = 0) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB - ON DB.TENANT_ID = T.TENANT_ID - AND DB.DATABASE_ID = T.DATABASE_ID + ON DB.TENANT_ID = TC.TENANT_ID + AND DB.DATABASE_ID = TC.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() - AND (T.DATABASE_ID = USERENV('SCHEMAID') - OR USER_CAN_ACCESS_OBJ(1, T.TABLE_ID, T.DATABASE_ID) = 1) - JOIN - (SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - SUB_DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE - - UNION ALL - - SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - SUB_DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C - ON C.TENANT_ID = T.TENANT_ID - AND C.TABLE_ID = T.TABLE_ID - AND C.IS_HIDDEN = 0 + AND (TC.DATABASE_ID = USERENV('SCHEMAID') + OR USER_CAN_ACCESS_OBJ(1, TC.TABLE_ID, TC.DATABASE_ID) = 1) LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT - ON C.TENANT_ID = STAT.TENANT_ID - AND C.TABLE_ID = STAT.TABLE_ID - AND C.COLUMN_ID = STAT.COLUMN_ID + ON TC.TENANT_ID = STAT.TENANT_ID + AND TC.TABLE_ID = STAT.TABLE_ID + AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() """.replace("\n", " ") @@ -34705,9 +34685,9 @@ def_table_schema( view_definition = """ SELECT CAST(DB.DATABASE_NAME AS VARCHAR2(128)) AS OWNER, - CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, - CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, - CAST(DECODE(C.DATA_TYPE, + CAST(TC.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, + CAST(TC.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, + CAST(DECODE(TC.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', @@ -34747,18 +34727,18 @@ SELECT 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', - 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), + 30, DECODE(TC.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', - 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), - 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), - 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), + 36, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')), + 37, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')), + 38, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')), 39, 'RAW', - 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), - 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), + 40, CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')), + 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', @@ -34766,35 +34746,35 @@ SELECT 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', - 49, DECODE(C.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), + 49, DECODE(TC.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, - CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 - WHEN C.DATA_TYPE = 11 THEN 4 - WHEN C.DATA_TYPE = 12 THEN 8 - WHEN C.DATA_TYPE in (17, 19) THEN 7 - WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END - WHEN C.DATA_TYPE = 41 THEN 11 - WHEN C.DATA_TYPE = 40 THEN 5 - WHEN C.DATA_TYPE = 30 THEN 4000 - WHEN C.DATA_TYPE = 36 THEN 13 - WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) - WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) - ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) + CAST(CASE WHEN TC.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 + WHEN TC.DATA_TYPE = 11 THEN 4 + WHEN TC.DATA_TYPE = 12 THEN 8 + WHEN TC.DATA_TYPE in (17, 19) THEN 7 + WHEN TC.DATA_TYPE in (18, 37, 38) THEN CASE WHEN TC.DATA_SCALE = 0 THEN 7 ELSE 11 END + WHEN TC.DATA_TYPE = 41 THEN 11 + WHEN TC.DATA_TYPE = 40 THEN 5 + WHEN TC.DATA_TYPE = 30 THEN 4000 + WHEN TC.DATA_TYPE = 36 THEN 13 + WHEN TC.DATA_TYPE IN (0,22,43,46) AND TC.DATA_PRECISION = 1 THEN LEAST(32767, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) + WHEN TC.DATA_TYPE IN (23,44) AND TC.DATA_PRECISION = 1 THEN LEAST(2000, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) + ELSE TC.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL - ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END + ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL - ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END + ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, - CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, - CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, - CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, + CAST(DECODE(TC.NULLABLE, 0, 'N', DECODE(BITAND(TC.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, TC.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, + CAST(LENGTHB(TC.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, + CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, @@ -34803,10 +34783,10 @@ SELECT CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, - CAST(DECODE(C.DATA_TYPE, + CAST(DECODE(TC.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', - 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), + 30, DECODE(TC.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, @@ -34815,24 +34795,24 @@ SELECT CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, - CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, - CAST(DECODE(C.DATA_TYPE, - 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), + CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, + CAST(DECODE(TC.DATA_TYPE, + 22, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 23, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 43, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 44, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, - CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, + CAST(TC.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, @@ -34842,70 +34822,63 @@ SELECT CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM - (SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE + (SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.SUB_DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, + SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C + WHERE C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + AND C.IS_HIDDEN = 0 UNION ALL - SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID() - AND TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) - AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) T + SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.SUB_DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, + SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C + WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() + AND C.TENANT_ID = EFFECTIVE_TENANT_ID() + AND T.TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) + AND bitand((T.TABLE_MODE / 4096), 15) IN (0,1) + AND C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + AND C.IS_HIDDEN = 0) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB - ON DB.TENANT_ID = T.TENANT_ID - AND DB.DATABASE_ID = T.DATABASE_ID + ON DB.TENANT_ID = TC.TENANT_ID + AND DB.DATABASE_ID = TC.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() - JOIN - (SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - SUB_DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE - - UNION ALL - - SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - SUB_DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C - ON C.TENANT_ID = T.TENANT_ID - AND C.TABLE_ID = T.TABLE_ID - AND C.IS_HIDDEN = 0 LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT - ON C.TENANT_ID = STAT.TENANT_ID - AND C.TABLE_ID = STAT.TABLE_ID - AND C.COLUMN_ID = STAT.COLUMN_ID + ON TC.TENANT_ID = STAT.TENANT_ID + AND TC.TABLE_ID = STAT.TABLE_ID + AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() """.replace("\n", " ") @@ -34923,9 +34896,9 @@ def_table_schema( in_tenant_space = True, view_definition = """ SELECT - CAST(T.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, - CAST(C.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, - CAST(DECODE(C.DATA_TYPE, + CAST(TC.TABLE_NAME AS VARCHAR2(128)) AS TABLE_NAME, + CAST(TC.COLUMN_NAME AS VARCHAR2(128)) AS COLUMN_NAME, + CAST(DECODE(TC.DATA_TYPE, 0, 'VARCHAR2', 1, 'NUMBER', @@ -34965,18 +34938,18 @@ SELECT 27, 'TINYTEXT', 28, 'TEXT', 29, 'MEDIUMTEXT', - 30, DECODE(C.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), + 30, DECODE(TC.COLLATION_TYPE, 63, 'BLOB', 'CLOB'), 31, 'BIT', 32, 'ENUM', 33, 'SET', 34, 'ENUM_INNER', 35, 'SET_INNER', - 36, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH TIME ZONE')), - 37, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ') WITH LOCAL TIME ZONE')), - 38, CONCAT('TIMESTAMP(', CONCAT(C.DATA_SCALE, ')')), + 36, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH TIME ZONE')), + 37, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ') WITH LOCAL TIME ZONE')), + 38, CONCAT('TIMESTAMP(', CONCAT(TC.DATA_SCALE, ')')), 39, 'RAW', - 40, CONCAT('INTERVAL YEAR(', CONCAT(C.DATA_SCALE, ') TO MONTH')), - 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(C.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(C.DATA_SCALE, 10), ')')))), + 40, CONCAT('INTERVAL YEAR(', CONCAT(TC.DATA_SCALE, ') TO MONTH')), + 41, CONCAT('INTERVAL DAY(', CONCAT(TRUNC(TC.DATA_SCALE/10), CONCAT(') TO SECOND(', CONCAT(MOD(TC.DATA_SCALE, 10), ')')))), 42, 'FLOAT', 43, 'NVARCHAR2', 44, 'NCHAR', @@ -34984,35 +34957,35 @@ SELECT 46, 'LOB', 47, 'JSON', 48, 'GEOMETRY', - 49, DECODE(C.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), + 49, DECODE(TC.SUB_DATA_TYPE, 300001, 'XMLTYPE', 'UDT'), 50, 'NUMBER', 'UNDEFINED') AS VARCHAR2(128)) AS DATA_TYPE, CAST(NULL AS VARCHAR2(3)) AS DATA_TYPE_MOD, CAST(NULL AS VARCHAR2(128)) AS DATA_TYPE_OWNER, - CAST(CASE WHEN C.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 - WHEN C.DATA_TYPE = 11 THEN 4 - WHEN C.DATA_TYPE = 12 THEN 8 - WHEN C.DATA_TYPE in (17, 19) THEN 7 - WHEN C.DATA_TYPE in (18, 37, 38) THEN CASE WHEN C.DATA_SCALE = 0 THEN 7 ELSE 11 END - WHEN C.DATA_TYPE = 41 THEN 11 - WHEN C.DATA_TYPE = 40 THEN 5 - WHEN C.DATA_TYPE = 30 THEN 4000 - WHEN C.DATA_TYPE = 36 THEN 13 - WHEN C.DATA_TYPE IN (0,22,43,46) AND C.DATA_PRECISION = 1 THEN LEAST(32767, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) - WHEN C.DATA_TYPE IN (23,44) AND C.DATA_PRECISION = 1 THEN LEAST(2000, C.DATA_LENGTH * DECODE(C.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) - ELSE C.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) + CAST(CASE WHEN TC.DATA_TYPE in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 13, 14, 15, 16, 42, 50) THEN 22 + WHEN TC.DATA_TYPE = 11 THEN 4 + WHEN TC.DATA_TYPE = 12 THEN 8 + WHEN TC.DATA_TYPE in (17, 19) THEN 7 + WHEN TC.DATA_TYPE in (18, 37, 38) THEN CASE WHEN TC.DATA_SCALE = 0 THEN 7 ELSE 11 END + WHEN TC.DATA_TYPE = 41 THEN 11 + WHEN TC.DATA_TYPE = 40 THEN 5 + WHEN TC.DATA_TYPE = 30 THEN 4000 + WHEN TC.DATA_TYPE = 36 THEN 13 + WHEN TC.DATA_TYPE IN (0,22,43,46) AND TC.DATA_PRECISION = 1 THEN LEAST(32767, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) + WHEN TC.DATA_TYPE IN (23,44) AND TC.DATA_PRECISION = 1 THEN LEAST(2000, TC.DATA_LENGTH * DECODE(TC.COLLATION_TYPE, 63, 1, 249, 4, 248, 4, 87, 2,28, 2, 55, 2, 54, 4, 101, 2, 46, 4, 45, 4, 224, 4, 1)) + ELSE TC.DATA_LENGTH END AS NUMBER) AS DATA_LENGTH, + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,18,19,22,23,27,28,29,30,36,37,38,43,44) THEN NULL - ELSE CASE WHEN C.DATA_PRECISION < 0 THEN NULL ELSE C.DATA_PRECISION END + ELSE CASE WHEN TC.DATA_PRECISION < 0 THEN NULL ELSE TC.DATA_PRECISION END END AS NUMBER) AS DATA_PRECISION, - CAST(CASE WHEN C.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) + CAST(CASE WHEN TC.DATA_TYPE IN (0,11,12,17,19,22,23,27,28,29,30,42,43,44) THEN NULL - ELSE CASE WHEN C.DATA_SCALE < -84 THEN NULL ELSE C.DATA_SCALE END + ELSE CASE WHEN TC.DATA_SCALE < -84 THEN NULL ELSE TC.DATA_SCALE END END AS NUMBER) AS DATA_SCALE, - CAST(DECODE(C.NULLABLE, 0, 'N', DECODE(BITAND(C.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, C.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, - CAST(LENGTHB(C.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, - CAST(C.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, + CAST(DECODE(TC.NULLABLE, 0, 'N', DECODE(BITAND(TC.COLUMN_FLAGS, 5 * POWER(2, 13)), 5 * POWER(2, 13), 'N', 'Y')) AS VARCHAR2(1)) AS NULLABLE, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, TC.COLUMN_ID, NULL) AS NUMBER) AS COLUMN_ID, + CAST(LENGTHB(TC.CUR_DEFAULT_VALUE_V2) AS NUMBER) AS DEFAULT_LENGTH, + CAST(TC.CUR_DEFAULT_VALUE_V2 AS /* TODO: LONG() */ VARCHAR(32767)) AS DATA_DEFAULT, CAST(STAT.DISTINCT_CNT AS NUMBER) AS NUM_DISTINCT, CAST(STAT.MIN_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS LOW_VALUE, CAST(STAT.MAX_VALUE AS /* TODO: RAW */ VARCHAR(128)) AS HIGH_VALUE, @@ -35021,10 +34994,10 @@ SELECT CAST(STAT.BUCKET_CNT AS NUMBER) AS NUM_BUCKETS, CAST(STAT.LAST_ANALYZED AS DATE) AS LAST_ANALYZED, CAST(STAT.SAMPLE_SIZE AS NUMBER) AS SAMPLE_SIZE, - CAST(DECODE(C.DATA_TYPE, + CAST(DECODE(TC.DATA_TYPE, 22, 'CHAR_CS', 23, 'CHAR_CS', - 30, DECODE(C.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), + 30, DECODE(TC.COLLATION_TYPE, 63, 'NULL', 'CHAR_CS'), 43, 'NCHAR_CS', 44, 'NCHAR_CS', '') AS VARCHAR2(44)) AS CHARACTER_SET_NAME, @@ -35033,24 +35006,24 @@ SELECT CAST(DECODE(STAT.USER_STATS, 0, 'NO', 1, 'YES', NULL) AS VARCHAR2(3)) AS USER_STATS, CAST(NULL AS VARCHAR2(80)) AS NOTES, CAST(STAT.AVG_LEN AS NUMBER) AS AVG_COL_LEN, - CAST(CASE WHEN C.DATA_TYPE IN (22,23,43,44) THEN C.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, - CAST(DECODE(C.DATA_TYPE, - 22, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 23, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 43, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), - 44, DECODE(C.DATA_PRECISION, 1, 'C', 'B'), + CAST(CASE WHEN TC.DATA_TYPE IN (22,23,43,44) THEN TC.DATA_LENGTH ELSE 0 END AS NUMBER) AS CHAR_LENGTH, + CAST(DECODE(TC.DATA_TYPE, + 22, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 23, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 43, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), + 44, DECODE(TC.DATA_PRECISION, 1, 'C', 'B'), NULL) AS VARCHAR2(1)) AS CHAR_USED, CAST(NULL AS VARCHAR2(3)) AS V80_FMT_IMAGE, CAST(NULL AS VARCHAR2(3)) AS DATA_UPGRADED, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, - CAST(DECODE(BITAND(C.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 64), 0, 'NO', 'YES') AS VARCHAR2(3)) AS HIDDEN_COLUMN, + CAST(DECODE(BITAND(TC.COLUMN_FLAGS, 1), 1, 'YES', 'NO') AS VARCHAR2(3)) AS VIRTUAL_COLUMN, CAST(NULL AS NUMBER) AS SEGMENT_COLUMN_ID, CAST(NULL AS NUMBER) AS INTERNAL_COLUMN_ID, CAST((CASE WHEN STAT.HISTOGRAM_TYPE = 1 THEN 'FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 3 THEN 'TOP-FREQUENCY' WHEN STAT.HISTOGRAM_TYPE = 4 THEN 'HYBRID' ELSE NULL END) AS VARCHAR2(15)) AS HISTOGRAM, - CAST(C.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, + CAST(TC.COLUMN_NAME AS VARCHAR2(4000)) AS QUALIFIED_COL_NAME, CAST('YES' AS VARCHAR2(3)) AS USER_GENERATED, CAST(NULL AS VARCHAR2(3)) AS DEFAULT_ON_NULL, CAST(NULL AS VARCHAR2(3)) AS IDENTITY_COLUMN, @@ -35060,71 +35033,64 @@ SELECT CAST(NULL AS VARCHAR2(100)) AS COLLATION, CAST(NULL AS NUMBER) AS COLLATED_COLUMN_ID FROM - (SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE + (SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.SUB_DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, + SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C + WHERE C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + AND C.IS_HIDDEN = 0 UNION ALL - SELECT TENANT_ID, - TABLE_ID, - DATABASE_ID, - TABLE_NAME, - TABLE_TYPE - FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID() - AND TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) - AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) T + SELECT T.TENANT_ID, + T.TABLE_ID, + T.DATABASE_ID, + T.TABLE_NAME, + T.TABLE_TYPE, + C.COLUMN_ID, + C.COLUMN_NAME, + C.DATA_TYPE, + C.SUB_DATA_TYPE, + C.COLLATION_TYPE, + C.DATA_SCALE, + C.DATA_LENGTH, + C.DATA_PRECISION, + C.NULLABLE, + C.COLUMN_FLAGS, + C.CUR_DEFAULT_VALUE_V2 + FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, + SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C + WHERE T.TENANT_ID = EFFECTIVE_TENANT_ID() + AND C.TENANT_ID = EFFECTIVE_TENANT_ID() + AND T.TABLE_TYPE IN (0,1,3,4,5,7,8,9,14,15) + AND bitand((T.TABLE_MODE / 4096), 15) IN (0,1) + AND C.TENANT_ID = T.TENANT_ID + AND C.TABLE_ID = T.TABLE_ID + AND C.IS_HIDDEN = 0) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT DB - ON DB.TENANT_ID = T.TENANT_ID - AND DB.DATABASE_ID = T.DATABASE_ID + ON DB.TENANT_ID = TC.TENANT_ID + AND DB.DATABASE_ID = TC.DATABASE_ID AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() - AND T.DATABASE_ID = USERENV('SCHEMAID') - JOIN - (SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - SUB_DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE - - UNION ALL - - SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - DATA_TYPE, - SUB_DATA_TYPE, - COLLATION_TYPE, - DATA_SCALE, - DATA_LENGTH, - DATA_PRECISION, - NULLABLE, - COLUMN_FLAGS, - CUR_DEFAULT_VALUE_V2, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) C - ON C.TENANT_ID = T.TENANT_ID - AND C.TABLE_ID = T.TABLE_ID - AND C.IS_HIDDEN = 0 + AND TC.DATABASE_ID = USERENV('SCHEMAID') LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT STAT - ON C.TENANT_ID = STAT.TENANT_ID - AND C.TABLE_ID = STAT.TABLE_ID - AND C.COLUMN_ID = STAT.COLUMN_ID + ON TC.TENANT_ID = STAT.TENANT_ID + AND TC.TABLE_ID = STAT.TABLE_ID + AND TC.COLUMN_ID = STAT.COLUMN_ID AND STAT.OBJECT_TYPE = 1 AND STAT.TENANT_ID = EFFECTIVE_TENANT_ID() """.replace("\n", " ") @@ -53358,8 +53324,8 @@ def_table_schema( in_tenant_space = True, view_definition = """select cast(db.database_name as VARCHAR2(128)) as OWNER, - cast(t.table_name as VARCHAR2(128)) as TABLE_NAME, - cast(c.column_name as VARCHAR2(128)) as COLUMN_NAME, + cast(TC.table_name as VARCHAR2(128)) as TABLE_NAME, + cast(TC.column_name as VARCHAR2(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as varchar(128)) as LOW_VALUE, cast(stat.max_value as varchar(128)) as HIGH_VALUE, @@ -53378,51 +53344,48 @@ def_table_schema( else NULL end) as VARCHAR2(15)) as HISTOGRAM, cast(NULL as VARCHAR2(7)) SCOPE FROM - (SELECT TENANT_ID, - DATABASE_ID, - TABLE_ID, - TABLE_NAME - FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE + (SELECT T.TENANT_ID, + T.DATABASE_ID, + T.TABLE_ID, + T.TABLE_NAME, + C.COLUMN_ID, + C.COLUMN_NAME, + C.IS_HIDDEN + FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, + SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C + WHERE C.tenant_id = T.tenant_id + AND C.table_id = T.table_id + AND T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL - SELECT TENANT_ID, - DATABASE_ID, - TABLE_ID, - TABLE_NAME - FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT + SELECT T.TENANT_ID, + T.DATABASE_ID, + T.TABLE_ID, + T.TABLE_NAME, + C.COLUMN_ID, + C.COLUMN_NAME, + C.IS_HIDDEN + FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, + SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C WHERE table_type in (0,2,3,8,9,14) - AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) t + AND bitand((TABLE_MODE / 4096), 15) IN (0,1) + AND C.TENANT_ID = EFFECTIVE_TENANT_ID() + AND T.TENANT_ID = EFFECTIVE_TENANT_ID() + AND C.tenant_id = T.tenant_id + AND C.table_id = T.table_id) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT db - ON db.tenant_id = t.tenant_id - AND db.database_id = t.database_id - AND (t.database_id = userenv('SCHEMAID') - OR user_can_access_obj(1, t.table_id, t.database_id) = 1) - AND T.TENANT_ID = EFFECTIVE_TENANT_ID() + ON db.tenant_id = TC.tenant_id + AND db.database_id = TC.database_id + AND (TC.database_id = userenv('SCHEMAID') + OR user_can_access_obj(1, TC.table_id, TC.database_id) = 1) AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() - JOIN - (SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE - UNION ALL - SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) c - ON c.tenant_id = t.tenant_id - AND c.table_id = t.table_id LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT stat - ON c.table_id = stat.table_id - AND c.column_id = stat.column_id + ON TC.table_id = stat.table_id + AND TC.column_id = stat.column_id AND stat.object_type = 1 WHERE - c.is_hidden = 0; + TC.is_hidden = 0; """.replace("\n", " ") ) @@ -53439,8 +53402,8 @@ def_table_schema( in_tenant_space = True, view_definition = """select cast(db.database_name as VARCHAR2(128)) as OWNER, - cast(t.table_name as VARCHAR2(128)) as TABLE_NAME, - cast(c.column_name as VARCHAR2(128)) as COLUMN_NAME, + cast(TC.table_name as VARCHAR2(128)) as TABLE_NAME, + cast(TC.column_name as VARCHAR2(128)) as COLUMN_NAME, cast(stat.distinct_cnt as NUMBER) as NUM_DISTINCT, cast(stat.min_value as varchar(128)) as LOW_VALUE, cast(stat.max_value as varchar(128)) as HIGH_VALUE, @@ -53459,49 +53422,46 @@ def_table_schema( else NULL end) as VARCHAR2(15)) as HISTOGRAM, cast(NULL as VARCHAR2(7)) SCOPE FROM - (SELECT TENANT_ID, - DATABASE_ID, - TABLE_ID, - TABLE_NAME - FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE + (SELECT T.TENANT_ID, + T.DATABASE_ID, + T.TABLE_ID, + T.TABLE_NAME, + C.COLUMN_ID, + C.COLUMN_NAME, + C.IS_HIDDEN + FROM SYS.ALL_VIRTUAL_CORE_ALL_TABLE T, + SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE C + WHERE C.tenant_id = T.tenant_id + AND C.table_id = T.table_id + AND T.TENANT_ID = EFFECTIVE_TENANT_ID() UNION ALL - SELECT TENANT_ID, - DATABASE_ID, - TABLE_ID, - TABLE_NAME - FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT + SELECT T.TENANT_ID, + T.DATABASE_ID, + T.TABLE_ID, + T.TABLE_NAME, + C.COLUMN_ID, + C.COLUMN_NAME, + C.IS_HIDDEN + FROM SYS.ALL_VIRTUAL_TABLE_REAL_AGENT T, + SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT C WHERE table_type in (0,2,3,8,9,14) - AND bitand((TABLE_MODE / 4096), 15) IN (0,1)) t + AND bitand((TABLE_MODE / 4096), 15) IN (0,1) + AND C.TENANT_ID = EFFECTIVE_TENANT_ID() + AND T.TENANT_ID = EFFECTIVE_TENANT_ID() + AND C.tenant_id = T.tenant_id + AND C.table_id = T.table_id) TC JOIN SYS.ALL_VIRTUAL_DATABASE_REAL_AGENT db - ON db.tenant_id = t.tenant_id - AND db.database_id = t.database_id - AND t.TENANT_ID = EFFECTIVE_TENANT_ID() + ON db.tenant_id = TC.tenant_id + AND db.database_id = TC.database_id AND DB.TENANT_ID = EFFECTIVE_TENANT_ID() - JOIN - (SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_CORE_COLUMN_TABLE - UNION ALL - SELECT TENANT_ID, - TABLE_ID, - COLUMN_ID, - COLUMN_NAME, - IS_HIDDEN - FROM SYS.ALL_VIRTUAL_COLUMN_REAL_AGENT - WHERE TENANT_ID = EFFECTIVE_TENANT_ID()) c - ON c.tenant_id = t.tenant_id - AND c.table_id = t.table_id LEFT JOIN SYS.ALL_VIRTUAL_COLUMN_STAT_REAL_AGENT stat - ON c.table_id = stat.table_id - AND c.column_id = stat.column_id + ON TC.table_id = stat.table_id + AND TC.column_id = stat.column_id AND stat.object_type = 1 WHERE - c.is_hidden = 0; + TC.is_hidden = 0; """.replace("\n", " ") )