diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-03-04 19:31:33 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2008-03-04 19:31:33 +0000 |
commit | 390c3e4d5ce57a9768de848ff0c1a0c483a4e081 (patch) | |
tree | cb40de00dfd011618b2a47b0b2e4ff8ab0bb973f /lib/sqlalchemy/databases/postgres.py | |
parent | cef292c0429b292466a486bd80723b6728273467 (diff) | |
download | sqlalchemy-390c3e4d5ce57a9768de848ff0c1a0c483a4e081.tar.gz |
- postgres PGArray is a "mutable" type by default;
when used with the ORM, mutable-style equality/
copy-on-write techniques are used to test for changes.
Diffstat (limited to 'lib/sqlalchemy/databases/postgres.py')
-rw-r--r-- | lib/sqlalchemy/databases/postgres.py | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/lib/sqlalchemy/databases/postgres.py b/lib/sqlalchemy/databases/postgres.py index 9f8e98607..19228f558 100644 --- a/lib/sqlalchemy/databases/postgres.py +++ b/lib/sqlalchemy/databases/postgres.py @@ -113,11 +113,24 @@ class PGBoolean(sqltypes.Boolean): def get_col_spec(self): return "BOOLEAN" -class PGArray(sqltypes.Concatenable, sqltypes.TypeEngine): - def __init__(self, item_type): +class PGArray(sqltypes.MutableType, sqltypes.Concatenable, sqltypes.TypeEngine): + def __init__(self, item_type, mutable=True): if isinstance(item_type, type): item_type = item_type() self.item_type = item_type + self.mutable = mutable + + def copy_value(self, value): + if self.mutable: + return list(value) + else: + return value + + def compare_values(self, x, y): + return x == y + + def is_mutable(self): + return self.mutable def dialect_impl(self, dialect, **kwargs): impl = self.__class__.__new__(self.__class__) |