Added DatabaseIntrospection.index_default_access_method hook on the PostgreSQL backend.

This hook is for the CockroachDB backend where the name is 'prefix'.
This commit is contained in:
Tim Graham 2020-09-15 01:38:50 -04:00 committed by GitHub
parent e11d05e0b4
commit 7f2392981d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
1 changed files with 10 additions and 3 deletions

View File

@ -28,6 +28,8 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
2950: 'UUIDField', 2950: 'UUIDField',
3802: 'JSONField', 3802: 'JSONField',
} }
# A hook for subclasses.
index_default_access_method = 'btree'
ignored_tables = [] ignored_tables = []
@ -189,7 +191,7 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
pg_get_indexdef(idx.indexrelid) pg_get_indexdef(idx.indexrelid)
END AS exprdef, END AS exprdef,
CASE am.amname CASE am.amname
WHEN 'btree' THEN WHEN %s THEN
CASE (option & 1) CASE (option & 1)
WHEN 1 THEN 'DESC' ELSE 'ASC' WHEN 1 THEN 'DESC' ELSE 'ASC'
END END
@ -206,10 +208,15 @@ class DatabaseIntrospection(BaseDatabaseIntrospection):
WHERE c.relname = %s AND pg_catalog.pg_table_is_visible(c.oid) WHERE c.relname = %s AND pg_catalog.pg_table_is_visible(c.oid)
) s2 ) s2
GROUP BY indexname, indisunique, indisprimary, amname, exprdef, attoptions; GROUP BY indexname, indisunique, indisprimary, amname, exprdef, attoptions;
""", [table_name]) """, [self.index_default_access_method, table_name])
for index, columns, unique, primary, orders, type_, definition, options in cursor.fetchall(): for index, columns, unique, primary, orders, type_, definition, options in cursor.fetchall():
if index not in constraints: if index not in constraints:
basic_index = type_ == 'btree' and not index.endswith('_btree') and options is None basic_index = (
type_ == self.index_default_access_method and
# '_btree' references
# django.contrib.postgres.indexes.BTreeIndex.suffix.
not index.endswith('_btree') and options is None
)
constraints[index] = { constraints[index] = {
"columns": columns if columns != [None] else [], "columns": columns if columns != [None] else [],
"orders": orders if orders != [None] else [], "orders": orders if orders != [None] else [],