Skip to content

Commit 7748810

Browse files
gordthompsonrafiss
authored andcommitted
Fix reflection of CHAR columns
1 parent 2ef80fc commit 7748810

File tree

8 files changed

+23
-44
lines changed

8 files changed

+23
-44
lines changed

.github/workflows/ci.yml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,9 +41,7 @@ jobs:
4141
matrix:
4242
crdb-version: [
4343
"cockroach:latest-v24.1",
44-
"cockroach:latest-v24.2",
4544
"cockroach:latest-v24.3",
46-
"cockroach:latest-v25.1",
4745
"cockroach:latest-v25.2",
4846
"cockroach:latest-v25.3"
4947
]

CHANGES.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# Version 2.0.4
22
Unreleased
33

4+
- Fix reflection of CHAR columns (#275)
5+
46

57
# Version 2.0.3
68
June 10, 2025

dev-requirements.txt

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ cffi==1.17.1
66
# via cryptography
77
charset-normalizer==3.4.3
88
# via requests
9-
cryptography==45.0.6
9+
cryptography==45.0.7
1010
# via secretstorage
1111
distlib==0.4.0
1212
# via virtualenv
@@ -50,7 +50,7 @@ packaging==25.0
5050
# via
5151
# tox
5252
# twine
53-
platformdirs==4.3.8
53+
platformdirs==4.4.0
5454
# via virtualenv
5555
pluggy==1.6.0
5656
# via tox
@@ -85,7 +85,7 @@ tox==3.23.1
8585
# via -r dev-requirements.in
8686
twine==6.1.0
8787
# via -r dev-requirements.in
88-
typing-extensions==4.14.1
88+
typing-extensions==4.15.0
8989
# via virtualenv
9090
urllib3==2.5.0
9191
# via

sqlalchemy_cockroachdb/base.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@
4949
"timestamp with time zone": sqltypes.TIMESTAMP,
5050
"timestamp without time zone": sqltypes.TIMESTAMP,
5151
"interval": sqltypes.Interval,
52-
"char": sqltypes.VARCHAR,
52+
"char": sqltypes.CHAR,
5353
"char varying": sqltypes.VARCHAR,
54-
"character": sqltypes.VARCHAR,
54+
"character": sqltypes.CHAR,
5555
"character varying": sqltypes.VARCHAR,
5656
"string": sqltypes.VARCHAR,
5757
"text": sqltypes.VARCHAR,
@@ -244,7 +244,7 @@ def get_columns(self, conn, table_name, schema=None, **kw):
244244
precision=row.numeric_precision,
245245
scale=row.numeric_scale,
246246
)
247-
elif type_class is sqltypes.VARCHAR:
247+
elif type_class is sqltypes.VARCHAR or type_class is sqltypes.CHAR:
248248
typ = type_class(length=row.character_maximum_length)
249249
else:
250250
typ = type_class

test-requirements.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
alembic==1.16.4
1+
alembic==1.16.5
22
# via -r test-requirements.in
33
async-timeout==5.0.1
44
# via asyncpg
@@ -40,7 +40,7 @@ tomli==2.2.1
4040
# via
4141
# alembic
4242
# pytest
43-
typing-extensions==4.14.1
43+
typing-extensions==4.15.0
4444
# via
4545
# alembic
4646
# exceptiongroup

test/test_introspection.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,17 @@ def test_timestamp(self):
136136
def test_interval(self):
137137
self._test("interval", sqltypes.Interval)
138138

139-
def test_varchar(self):
139+
def test_char(self):
140140
types = [
141141
"char",
142-
"char varying",
143142
"character",
143+
]
144+
for t in types:
145+
self._test(t, sqltypes.CHAR)
146+
147+
def test_varchar(self):
148+
types = [
149+
"char varying",
144150
"character varying",
145151
"string",
146152
"text",

test/test_suite_alembic.py

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,13 @@
11
from alembic.testing.suite import * # noqa
2-
from sqlalchemy.testing import skip
3-
from alembic.testing.suite import AutogenerateFKOptionsTest as _AutogenerateFKOptionsTest
2+
# from sqlalchemy.testing import skip
43
from alembic.testing.suite import BackendAlterColumnTest as _BackendAlterColumnTest
54

65

7-
class AutogenerateFKOptionsTest(_AutogenerateFKOptionsTest):
8-
@skip("cockroachdb")
9-
def test_nochange_ondelete(self):
10-
pass
11-
12-
136
class BackendAlterColumnTest(_BackendAlterColumnTest):
14-
@skip("cockroachdb")
157
def test_modify_nullable_to_non(self):
16-
# previously needed "with self.op.get_context().autocommit_block():"
17-
# which is no longer valid in SQLA 2.0
18-
pass
8+
if config.db.dialect._is_v253plus:
9+
super().test_modify_nullable_to_non()
1910

20-
@skip("cockroachdb")
2111
def test_modify_type_int_str(self):
22-
# TODO: enable this test when warning removed for ALTER COLUMN int → string
23-
pass
12+
if config.db.dialect._is_v253plus:
13+
super().test_modify_type_int_str()

test/test_suite_sqlalchemy.py

Lines changed: 0 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
from sqlalchemy.testing.suite import (
55
ComponentReflectionTest as _ComponentReflectionTest,
66
)
7-
from sqlalchemy.testing.suite import (
8-
ComponentReflectionTestExtra as _ComponentReflectionTestExtra,
9-
)
107
from sqlalchemy.testing.suite import HasIndexTest as _HasIndexTest
118
from sqlalchemy.testing.suite import HasTableTest as _HasTableTest
129
from sqlalchemy.testing.suite import IntegerTest as _IntegerTest
@@ -21,7 +18,6 @@
2118
)
2219
from sqlalchemy.testing.suite import TrueDivTest as _TrueDivTest
2320
from sqlalchemy.testing.suite import UnicodeSchemaTest as _UnicodeSchemaTest
24-
import sqlalchemy.types as sql_types
2521

2622

2723
class ComponentReflectionTest(_ComponentReflectionTest):
@@ -421,19 +417,6 @@ def test_not_existing_table(self):
421417
pass
422418

423419

424-
class ComponentReflectionTestExtra(_ComponentReflectionTestExtra):
425-
@testing.combinations(
426-
sql_types.String,
427-
sql_types.VARCHAR,
428-
# sql_types.CHAR, # we return VARCHAR(length=52)
429-
(sql_types.NVARCHAR, testing.requires.nvarchar_types),
430-
(sql_types.NCHAR, testing.requires.nvarchar_types),
431-
argnames="type_",
432-
)
433-
def test_string_length_reflection(self, connection, metadata, type_):
434-
super().test_string_length_reflection(connection, metadata, type_, [])
435-
436-
437420
class HasIndexTest(_HasIndexTest):
438421
@skip("cockroachdb")
439422
def test_has_index(self):

0 commit comments

Comments
 (0)