mirror of
https://github.com/coleifer/peewee.git
synced 2026-05-06 07:56:41 -04:00
Ensure we don't introspect pg indexes defined on diff schema.
Fixes #3043
This commit is contained in:
@@ -4214,11 +4214,14 @@ class PostgresqlDatabase(Database):
|
||||
FROM generate_subscripts(idx.indkey, 1) AS k
|
||||
ORDER BY k), ',')
|
||||
FROM pg_catalog.pg_class AS t
|
||||
INNER JOIN pg_catalog.pg_namespace AS n ON t.relnamespace = n.oid
|
||||
INNER JOIN pg_catalog.pg_index AS idx ON t.oid = idx.indrelid
|
||||
INNER JOIN pg_catalog.pg_class AS i ON idx.indexrelid = i.oid
|
||||
INNER JOIN pg_catalog.pg_indexes AS idxs ON
|
||||
(idxs.tablename = t.relname AND idxs.indexname = i.relname)
|
||||
WHERE t.relname = %s AND t.relkind = %s AND idxs.schemaname = %s
|
||||
INNER JOIN pg_catalog.pg_indexes AS idxs ON (
|
||||
idxs.tablename = t.relname
|
||||
AND idxs.indexname = i.relname
|
||||
AND idxs.schemaname = n.nspname)
|
||||
WHERE t.relname = %s AND t.relkind = %s AND n.nspname = %s
|
||||
ORDER BY idx.indisunique DESC, i.relname;"""
|
||||
cursor = self.execute_sql(query, (table, 'r', schema or 'public'))
|
||||
return [IndexMetadata(name, sql.rstrip(' ;'), columns.split(','),
|
||||
|
||||
+35
-1
@@ -15,12 +15,13 @@ from peewee import *
|
||||
from peewee import NodeList
|
||||
|
||||
from .base import BaseTestCase
|
||||
from .base import get_in_memory_db
|
||||
from .base import IS_CRDB
|
||||
from .base import IS_SQLITE
|
||||
from .base import ModelDatabaseTestCase
|
||||
from .base import ModelTestCase
|
||||
from .base import TestModel
|
||||
from .base import get_in_memory_db
|
||||
from .base import requires_postgresql
|
||||
from .base_models import Category
|
||||
from .base_models import Note
|
||||
from .base_models import Person
|
||||
@@ -1237,3 +1238,36 @@ class TestSchemaCreateAllDropAll(ModelTestCase):
|
||||
|
||||
TempModel._schema.drop_all()
|
||||
self.assertFalse(self.database.table_exists('temp_model'))
|
||||
|
||||
@requires_postgresql
|
||||
class TestSchemaGetIndexes(ModelTestCase):
|
||||
def setUp(self):
|
||||
super(TestSchemaGetIndexes, self).setUp()
|
||||
queries = [
|
||||
'create schema s1', 'create schema s2',
|
||||
'create table s1.t (c1 integer, c2 integer, c3 integer)',
|
||||
'create table s2.t (c1 integer, c2 integer, c3 integer)',
|
||||
'create index i1 on s1.t (c1, c2)',
|
||||
'create index i1 on s2.t (c1, c2)',
|
||||
'create index i2 on s1.t (c1)',
|
||||
]
|
||||
with self.database:
|
||||
for query in queries:
|
||||
self.database.execute_sql(query)
|
||||
|
||||
def tearDown(self):
|
||||
with self.database:
|
||||
self.database.execute_sql('drop schema s1 cascade')
|
||||
self.database.execute_sql('drop schema s2 cascade')
|
||||
super(TestSchemaGetIndexes, self).setUp()
|
||||
|
||||
def test_schema_get_indexes(self):
|
||||
tables = self.database.get_tables(schema='s1')
|
||||
self.assertEqual(tables, ['t'])
|
||||
idxs = self.database.get_indexes('t', schema='s1')
|
||||
self.assertEqual([(i.name, i.columns) for i in idxs],
|
||||
[('i1', ['c1', 'c2']), ('i2', ['c1'])])
|
||||
|
||||
idxs = self.database.get_indexes('t', schema='s2')
|
||||
self.assertEqual([(i.name, i.columns) for i in idxs],
|
||||
[('i1', ['c1', 'c2'])])
|
||||
|
||||
Reference in New Issue
Block a user