]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- func. objects can be pickled/unpickled [ticket:844]
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 4 Nov 2007 22:03:40 +0000 (22:03 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 4 Nov 2007 22:03:40 +0000 (22:03 +0000)
CHANGES
lib/sqlalchemy/sql.py
test/sql/select.py

diff --git a/CHANGES b/CHANGES
index 973db91da712f1e1f6d92a3211f6b5d8e466b0dc..12e1782f8d0da1d30a6cd39fc424e52ee6eab1b9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -1,4 +1,6 @@
 0.3.12
+- sql
+    - func. objects can be pickled/unpickled [ticket:844]
 - orm
     - query.get() and related functions (like many-to-one lazyloading)
       generate randomly-generated bind parameter names, to prevent
index 3367756e2d68a0eb87def110fbb420881a1b5bef..4581c987bb5f58d0a209083e9d65575d47f58ef0 100644 (file)
@@ -2507,8 +2507,16 @@ class _Grouping(ColumnElement):
         return self.elem._hide_froms()
     def _get_from_objects(self):
         return self.elem._get_from_objects()
+        
     def __getattr__(self, attr):
         return getattr(self.elem, attr)
+    
+    def __getstate__(self):
+        return {'elem':self.elem, 'type':self.type} 
+        
+    def __setstate__(self, state):
+        self.elem = state['elem']
+        self.type = state['type']
         
 class _Label(ColumnElement):
     """represent a label, as typically applied to any column-level element
index 1cf210975c75acec268cbc1c2d9cd4ee41f4deb6..c543d3c79377181a7e2128b47df033c3f1330c5f 100644 (file)
@@ -3,7 +3,7 @@ import testbase
 from sqlalchemy import *
 from sqlalchemy.databases import sqlite, postgres, mysql, oracle, firebird, mssql
 import unittest, re, operator
-
+import pickle
 
 # the select test now tests almost completely with TableClause/ColumnClause objects,
 # which are free-roaming table/column objects not attached to any database.  
@@ -568,6 +568,9 @@ FROM mytable, myothertable WHERE foo.id = foofoo(lala) AND datetime(foo) = Today
         # test None becomes NULL
         self.runtest(func.my_func(1,2,None,3), "my_func(:my_func, :my_func_1, NULL, :my_func_2)")
         
+        # test pickling
+        self.runtest(pickle.loads(pickle.dumps(func.my_func(1, 2, None, 3))), "my_func(:my_func, :my_func_1, NULL, :my_func_2)")
+        
     def testextract(self):
         """test the EXTRACT function"""
         self.runtest(select([extract("month", table3.c.otherstuff)]), "SELECT extract(month FROM thirdtable.otherstuff) FROM thirdtable")