You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
, (SELECT SUM(BYTES) FROM DBA_DATA_FILES) AS BYTES`,[],'getDatabase'
129
-
).then(res=>res[0]||db).catch(handleError(`Failed to get database infos`,db,opts))
124
+
constDATABASE: string|undefined=awaitconn.query<{NAME: string}>(`SELECT NAME FROM V$DATABASE`,[],'getDatabaseName')
125
+
.then(res=>res[0]?.NAME,handleError(`Failed to get database name`,undefined,{...opts,ignoreErrors: true}))
126
+
constVERSION: string|undefined=awaitconn.query<{VERSION: string}>(`SELECT BANNER AS VERSION FROM V$VERSION FETCH NEXT 1 ROW ONLY`,[],'getDatabaseVersion')
127
+
.then(res=>res[0]?.VERSION,handleError(`Failed to get database version`,undefined,{...opts,ignoreErrors: true}))
128
+
constBYTES: number|undefined=awaitconn.query<{BYTES: number}>(`SELECT SUM(BYTES) AS BYTES FROM DBA_DATA_FILES`,[],'getDatabaseSize')
129
+
.then(res=>res[0]?.BYTES,handleError(`Failed to get database size`,undefined,{...opts,ignoreErrors: true}))
// `i.INDEX_NAME NOT IN`: ignore indexes from primary keys
433
-
returnconn.query<RawIndex>(`
434
-
SELECT i.TABLESPACE_NAME AS INDEX_TABLESPACE
435
-
, i.INDEX_NAME AS INDEX_NAME
436
-
, i.INDEX_TYPE AS INDEX_TYPE
437
-
, i.TABLE_OWNER AS TABLE_OWNER
438
-
, i.TABLE_NAME AS TABLE_NAME
439
-
, i.TABLE_TYPE AS TABLE_TYPE
440
-
, LISTAGG(c.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY c.COLUMN_POSITION) AS COLUMN_NAMES
441
-
, JSON_OBJECTAGG(KEY c.COLUMN_NAME VALUE t.DATA_DEFAULT_VC) AS COLUMN_VALUES
442
-
, MIN(i.UNIQUENESS) AS IS_UNIQUE
443
-
, MIN(i.DISTINCT_KEYS) AS CARDINALITY
444
-
, MIN(i.NUM_ROWS) AS INDEX_ROWS
445
-
, MIN(i.LAST_ANALYZED) AS ANALYZED_LAST
446
-
, MIN(i.GENERATED) AS GENERATED
447
-
, MIN(i.PARTITIONED) AS PARTITIONED
448
-
, MIN(i.CONSTRAINT_INDEX) AS IS_CONSTRAINT
449
-
, MIN(i.VISIBILITY) AS VISIBILITY
450
-
FROM ALL_INDEXES i
451
-
JOIN ALL_IND_COLUMNS c ON c.INDEX_OWNER = i.OWNER AND c.INDEX_NAME = i.INDEX_NAME
452
-
LEFT JOIN ALL_TAB_COLS t ON t.OWNER = i.OWNER AND t.TABLE_NAME = i.TABLE_NAME AND t.COLUMN_NAME = c.COLUMN_NAME
453
-
WHERE i.DROPPED != 'YES'
454
-
AND ${scopeWhere({schema: 'i.TABLE_OWNER',entity: 'i.TABLE_NAME'},opts)}
455
-
AND i.INDEX_NAME NOT IN (SELECT co.CONSTRAINT_NAME FROM ALL_CONSTRAINTS co WHERE co.CONSTRAINT_TYPE = 'P' AND ${scopeWhere({schema: 'co.OWNER',entity: 'co.TABLE_NAME'},opts)})
456
-
GROUP BY i.TABLESPACE_NAME, i.INDEX_NAME, i.INDEX_TYPE, i.TABLE_OWNER, i.TABLE_NAME, i.TABLE_TYPE`,[],'getIndexes'
457
-
).catch(handleError(`Failed to get indexes`,[],opts))
435
+
constcCols=awaitgetTableColumns('SYS','ALL_TAB_COLS',opts)(conn)// check column presence to include them or not
436
+
constvalues=cCols.includes('DATA_DEFAULT_VC') ? 'JSON_OBJECTAGG(KEY c.COLUMN_NAME VALUE t.DATA_DEFAULT_VC)' : "'{}' "
437
+
constquery=
438
+
`SELECT i.TABLESPACE_NAME AS INDEX_TABLESPACE
439
+
, i.INDEX_NAME AS INDEX_NAME
440
+
, i.INDEX_TYPE AS INDEX_TYPE
441
+
, i.TABLE_OWNER AS TABLE_OWNER
442
+
, i.TABLE_NAME AS TABLE_NAME
443
+
, i.TABLE_TYPE AS TABLE_TYPE
444
+
, LISTAGG(c.COLUMN_NAME, ',') WITHIN GROUP (ORDER BY c.COLUMN_POSITION) AS COLUMN_NAMES
445
+
, ${values} AS COLUMN_VALUES
446
+
, MIN(i.UNIQUENESS) AS IS_UNIQUE
447
+
, MIN(i.DISTINCT_KEYS) AS CARDINALITY
448
+
, MIN(i.NUM_ROWS) AS INDEX_ROWS
449
+
, MIN(i.LAST_ANALYZED) AS ANALYZED_LAST
450
+
, MIN(i.GENERATED) AS GENERATED
451
+
, MIN(i.PARTITIONED) AS PARTITIONED
452
+
, MIN(i.CONSTRAINT_INDEX) AS IS_CONSTRAINT
453
+
, MIN(i.VISIBILITY) AS VISIBILITY
454
+
FROM ALL_INDEXES i
455
+
JOIN ALL_IND_COLUMNS c ON c.INDEX_OWNER = i.OWNER AND c.INDEX_NAME = i.INDEX_NAME
456
+
LEFT JOIN ALL_TAB_COLS t ON t.OWNER = i.OWNER AND t.TABLE_NAME = i.TABLE_NAME AND t.COLUMN_NAME = c.COLUMN_NAME
457
+
WHERE i.DROPPED != 'YES'
458
+
AND ${scopeWhere({schema: 'i.TABLE_OWNER',entity: 'i.TABLE_NAME'},opts)}
459
+
AND i.INDEX_NAME NOT IN (SELECT co.CONSTRAINT_NAME FROM ALL_CONSTRAINTS co WHERE co.CONSTRAINT_TYPE = 'P' AND ${scopeWhere({schema: 'co.OWNER',entity: 'co.TABLE_NAME'},opts)})
460
+
GROUP BY i.TABLESPACE_NAME, i.INDEX_NAME, i.INDEX_TYPE, i.TABLE_OWNER, i.TABLE_NAME, i.TABLE_TYPE`
461
+
returnconn.query<RawIndex>(query,[],'getIndexes').catch(handleError(`Failed to get indexes`,[],opts))
0 commit comments