Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 9 additions & 12 deletions contrib/babelfishpg_tsql/sql/sys_views.sql
Original file line number Diff line number Diff line change
Expand Up @@ -827,15 +827,6 @@ GRANT SELECT ON sys.identity_columns TO PUBLIC;

create or replace view sys.indexes as
-- Get all indexes from all system and user tables
with index_id_map as MATERIALIZED(
select
indexrelid,
case
when indisclustered then 1
else 1+row_number() over(partition by indrelid order by indexrelid)
end as index_id
from pg_index
)
select
cast(X.indrelid as int) as object_id
, cast(
Expand Down Expand Up @@ -864,9 +855,15 @@ select
, cast(0 as sys.bit) as has_filter
, cast(null as sys.nvarchar) as filter_definition
, cast(0 as sys.bit) as auto_created
, cast(imap.index_id as int) as index_id
from pg_index X
inner join index_id_map imap on imap.indexrelid = X.indexrelid
, cast(
case
when X.indisclustered then 1
else 2 + (SELECT count(*) FROM pg_index x2
WHERE x2.indrelid = X.indrelid
AND x2.indexrelid < X.indexrelid)
end
as int) as index_id
from pg_index X
inner join pg_class I on I.oid = X.indexrelid
inner join pg_class ptbl on ptbl.oid = X.indrelid and ptbl.relispartition = false
inner join pg_namespace nsp on nsp.oid = I.relnamespace
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,98 @@ CREATE OR REPLACE AGGREGATE sys.tsql_select_for_xml_text_agg(
FINALFUNC = tsql_query_to_xml_text_ffunc
);

create or replace view sys.indexes as
-- Get all indexes from all system and user tables
select
cast(X.indrelid as int) as object_id
, cast(
coalesce(
(select pg_catalog.string_agg(
case
when option like 'bbf_original_rel_name=%' then substring(option, 23 /* prefix length */)
else null
end, ',')
from unnest(I.reloptions) as option),
I.relname)
AS sys.sysname) AS name
, cast(case when X.indisclustered then 1 else 2 end as sys.tinyint) as type
, cast(case when X.indisclustered then 'CLUSTERED' else 'NONCLUSTERED' end as sys.nvarchar(60)) as type_desc
, cast(X.indisunique as sys.bit) as is_unique
, cast(case when ps.scheme_id is null then 1 else ps.scheme_id end as int) as data_space_id
, cast(0 as sys.bit) as ignore_dup_key
, cast(X.indisprimary as sys.bit) as is_primary_key
, cast(case when const.oid is null then 0 else 1 end as sys.bit) as is_unique_constraint
, cast(0 as sys.tinyint) as fill_factor
, cast(case when X.indpred is null then 0 else 1 end as sys.bit) as is_padded
, cast(case when X.indisready then 0 else 1 end as sys.bit) as is_disabled
, cast(0 as sys.bit) as is_hypothetical
, cast(1 as sys.bit) as allow_row_locks
, cast(1 as sys.bit) as allow_page_locks
, cast(0 as sys.bit) as has_filter
, cast(null as sys.nvarchar) as filter_definition
, cast(0 as sys.bit) as auto_created
, cast(
case
when X.indisclustered then 1
else 2 + (SELECT count(*) FROM pg_index x2
WHERE x2.indrelid = X.indrelid
AND x2.indexrelid < X.indexrelid)
end
as int) as index_id
from pg_index X
inner join pg_class I on I.oid = X.indexrelid
inner join pg_class ptbl on ptbl.oid = X.indrelid and ptbl.relispartition = false
inner join pg_namespace nsp on nsp.oid = I.relnamespace
left join sys.babelfish_namespace_ext ext on (nsp.nspname = ext.nspname and ext.dbid = sys.db_id())
left join sys.babelfish_partition_depend pd on
(ext.orig_name = pd.schema_name COLLATE sys.database_default
and CAST(ptbl.relname AS sys.nvarchar(128)) = pd.table_name COLLATE sys.database_default and pd.dbid = sys.db_id() and ptbl.relkind = 'p')
left join sys.babelfish_partition_scheme ps on (ps.partition_scheme_name = pd.partition_scheme_name and ps.dbid = sys.db_id())
-- check if index is a unique constraint
left join pg_constraint const on const.conindid = I.oid and const.contype = 'u'
where
-- index is active
X.indislive
-- filter to get all the objects that belong to sys or babelfish schemas
and (nsp.nspname = 'sys' or ext.nspname is not null)

union all
-- Create HEAP entries for each system and user table
select
cast(t.oid as int) as object_id
, cast(null as sys.sysname) as name
, cast(0 as sys.tinyint) as type
, cast('HEAP' as sys.nvarchar(60)) as type_desc
, cast(0 as sys.bit) as is_unique
, cast(case when ps.scheme_id is null then 1 else ps.scheme_id end as int) as data_space_id
, cast(0 as sys.bit) as ignore_dup_key
, cast(0 as sys.bit) as is_primary_key
, cast(0 as sys.bit) as is_unique_constraint
, cast(0 as sys.tinyint) as fill_factor
, cast(0 as sys.bit) as is_padded
, cast(0 as sys.bit) as is_disabled
, cast(0 as sys.bit) as is_hypothetical
, cast(1 as sys.bit) as allow_row_locks
, cast(1 as sys.bit) as allow_page_locks
, cast(0 as sys.bit) as has_filter
, cast(null as sys.nvarchar) as filter_definition
, cast(0 as sys.bit) as auto_created
, cast(0 as int) as index_id
from pg_class t
inner join pg_namespace nsp on nsp.oid = t.relnamespace
left join sys.babelfish_namespace_ext ext on (nsp.nspname = ext.nspname and ext.dbid = sys.db_id())
left join sys.babelfish_partition_depend pd on
(ext.orig_name = pd.schema_name COLLATE sys.database_default
and CAST(t.relname AS sys.nvarchar(128)) = pd.table_name COLLATE sys.database_default and pd.dbid = sys.db_id())
left join sys.babelfish_partition_scheme ps on (ps.partition_scheme_name = pd.partition_scheme_name and ps.dbid = sys.db_id())
where (t.relkind = 'r' or t.relkind = 'p')
and t.relispartition = false
-- filter to get all the objects that belong to sys or babelfish schemas
and (nsp.nspname = 'sys' or ext.nspname is not null)
and has_table_privilege(t.oid, 'SELECT,INSERT,UPDATE,DELETE,TRUNCATE,TRIGGER')
order by object_id, type_desc;
GRANT SELECT ON sys.indexes TO PUBLIC;

-- Drops the temporary procedure used by the upgrade script.
-- Please have this be one of the last statements executed in this upgrade script.
DROP PROCEDURE sys.babelfish_drop_deprecated_object(varchar, varchar, varchar, varchar);
Expand Down
Loading