summaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorChristophe Simonis <christophe@tinyerp.com>2008-12-09 14:31:32 +0100
committerChristophe Simonis <christophe@tinyerp.com>2008-12-09 14:31:32 +0100
commit822da77ee66b6d7e36ab100fa30ee8ee397c15bc (patch)
tree3c122b960f23362fd693c22212476bfe6b191b76 /bin
parentc2cc3a304996fd1a7208b8e0570eef435682e75f (diff)
[FIX] psycopg2: convert types & update web_services
bzr revid: christophe@tinyerp.com-20081209133132-wn7v8d2qyo3cv6x5
Diffstat (limited to 'bin')
-rw-r--r--bin/service/web_services.py10
-rw-r--r--bin/sql_db.py35
2 files changed, 35 insertions, 10 deletions
diff --git a/bin/service/web_services.py b/bin/service/web_services.py
index 69d8015f241..55ecdf91f04 100644
--- a/bin/service/web_services.py
+++ b/bin/service/web_services.py
@@ -65,8 +65,8 @@ class db(netsvc.Service):
self.actions[id] = {'clean': False}
db = sql_db.db_connect('template1', serialize=1)
- db.truedb.autocommit()
cr = db.cursor()
+ cr.autocommit(True)
time.sleep(0.2)
cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'')
cr.close()
@@ -140,12 +140,12 @@ class db(netsvc.Service):
def drop(self, password, db_name):
security.check_super(password)
- pooler.close_db(db_name)
+ sql_db.close_db(db_name)
logger = netsvc.Logger()
db = sql_db.db_connect('template1', serialize=1)
- db.truedb.autocommit()
cr = db.cursor()
+ cr.autocommit(True)
try:
try:
cr.execute('DROP DATABASE ' + db_name)
@@ -195,8 +195,8 @@ class db(netsvc.Service):
raise Exception, "Database already exists"
db = sql_db.db_connect('template1', serialize=1)
- db.truedb.autocommit()
cr = db.cursor()
+ cr.autocommit(True)
cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'')
cr.close()
@@ -231,7 +231,6 @@ class db(netsvc.Service):
def db_exist(self, db_name):
try:
db = sql_db.db_connect(db_name)
- db.truedb.close()
return True
except:
return False
@@ -256,7 +255,6 @@ class db(netsvc.Service):
cr.close()
except:
res = []
- db.truedb.close()
res.sort()
return res
diff --git a/bin/sql_db.py b/bin/sql_db.py
index e52b94d89fa..ccf57d0c718 100644
--- a/bin/sql_db.py
+++ b/bin/sql_db.py
@@ -28,6 +28,21 @@ from psycopg2.psycopg1 import cursor as psycopg1cursor
import psycopg2.extensions
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE)
+types_mapping = {
+ 'date': (1082,),
+ 'time': (1083,),
+ 'datetime': (1114,),
+}
+
+def undecimalize(symb, cr):
+ if symb is None: return None
+ return float(symb)
+
+for name, typeoid in types_mapping.items():
+ psycopg2.extensions.register_type(psycopg2.extensions.new_type(typeoid, name, lambda x, cr: x))
+psycopg2.extensions.register_type(psycopg2.extensions.new_type((700, 701, 1700,), 'float', undecimalize))
+
+
import tools
import re
@@ -64,16 +79,19 @@ class Cursor(object):
query = base_string(query)
if '%d' in query or '%f' in query:
- log(queyr, netsvc.LOG_WARNING)
+ #import traceback
+ #traceback.print_stack()
+ log(query, netsvc.LOG_WARNING)
log("SQL queries mustn't containt %d or %f anymore. Use only %s", netsvc.LOG_WARNING)
- query = query.replace('%d', '%s').replace('%f', '%s')
+ if p:
+ query = query.replace('%d', '%s').replace('%f', '%s')
if self.sql_log:
now = mdt.now()
log("SQL LOG query: %s" % (query,))
log("SQL LOG params: %r" % (p,))
- res = self._obj.execute(query, p)
+ res = self._obj.execute(query, p or None)
if self.sql_log:
self.count+=1
@@ -103,7 +121,7 @@ class Cursor(object):
log("SUM:%s/%d" % (sum, self.count))
def close(self):
- if self.sql_log:
+ if self.sql_from_log or self.sql_into_log:
self.print_log('from')
self.print_log('into')
self._obj.close()
@@ -166,8 +184,17 @@ class PoolManager(object):
return PoolManager._pools[db_name]
get = staticmethod(get)
+ def close(db_name):
+ if db_name is PoolManager._pools:
+ PoolManager._pools[db_name].closeall()
+ del PoolManager._pools[db_name]
+ close = staticmethod(close)
+
def db_connect(db_name, serialize=0):
return PoolManager.get(db_name)
+def close_db(db_name):
+ return PoolManager.close(db_name)
+
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: