[FIX] psycopg2: convert types & update web_services

bzr revid: christophe@tinyerp.com-20081209133132-wn7v8d2qyo3cv6x5
This commit is contained in:
Christophe Simonis 2008-12-09 14:31:32 +01:00
parent c2cc3a3049
commit 822da77ee6
2 changed files with 35 additions and 10 deletions

View File

@ -65,8 +65,8 @@ class db(netsvc.Service):
self.actions[id] = {'clean': False} self.actions[id] = {'clean': False}
db = sql_db.db_connect('template1', serialize=1) db = sql_db.db_connect('template1', serialize=1)
db.truedb.autocommit()
cr = db.cursor() cr = db.cursor()
cr.autocommit(True)
time.sleep(0.2) time.sleep(0.2)
cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'') cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'')
cr.close() cr.close()
@ -140,12 +140,12 @@ class db(netsvc.Service):
def drop(self, password, db_name): def drop(self, password, db_name):
security.check_super(password) security.check_super(password)
pooler.close_db(db_name) sql_db.close_db(db_name)
logger = netsvc.Logger() logger = netsvc.Logger()
db = sql_db.db_connect('template1', serialize=1) db = sql_db.db_connect('template1', serialize=1)
db.truedb.autocommit()
cr = db.cursor() cr = db.cursor()
cr.autocommit(True)
try: try:
try: try:
cr.execute('DROP DATABASE ' + db_name) cr.execute('DROP DATABASE ' + db_name)
@ -195,8 +195,8 @@ class db(netsvc.Service):
raise Exception, "Database already exists" raise Exception, "Database already exists"
db = sql_db.db_connect('template1', serialize=1) db = sql_db.db_connect('template1', serialize=1)
db.truedb.autocommit()
cr = db.cursor() cr = db.cursor()
cr.autocommit(True)
cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'') cr.execute('CREATE DATABASE ' + db_name + ' ENCODING \'unicode\'')
cr.close() cr.close()
@ -231,7 +231,6 @@ class db(netsvc.Service):
def db_exist(self, db_name): def db_exist(self, db_name):
try: try:
db = sql_db.db_connect(db_name) db = sql_db.db_connect(db_name)
db.truedb.close()
return True return True
except: except:
return False return False
@ -256,7 +255,6 @@ class db(netsvc.Service):
cr.close() cr.close()
except: except:
res = [] res = []
db.truedb.close()
res.sort() res.sort()
return res return res

View File

@ -28,6 +28,21 @@ from psycopg2.psycopg1 import cursor as psycopg1cursor
import psycopg2.extensions import psycopg2.extensions
psycopg2.extensions.register_type(psycopg2.extensions.UNICODE) 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 tools
import re import re
@ -64,16 +79,19 @@ class Cursor(object):
query = base_string(query) query = base_string(query)
if '%d' in query or '%f' in 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) 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: if self.sql_log:
now = mdt.now() now = mdt.now()
log("SQL LOG query: %s" % (query,)) log("SQL LOG query: %s" % (query,))
log("SQL LOG params: %r" % (p,)) log("SQL LOG params: %r" % (p,))
res = self._obj.execute(query, p) res = self._obj.execute(query, p or None)
if self.sql_log: if self.sql_log:
self.count+=1 self.count+=1
@ -103,7 +121,7 @@ class Cursor(object):
log("SUM:%s/%d" % (sum, self.count)) log("SUM:%s/%d" % (sum, self.count))
def close(self): def close(self):
if self.sql_log: if self.sql_from_log or self.sql_into_log:
self.print_log('from') self.print_log('from')
self.print_log('into') self.print_log('into')
self._obj.close() self._obj.close()
@ -166,8 +184,17 @@ class PoolManager(object):
return PoolManager._pools[db_name] return PoolManager._pools[db_name]
get = staticmethod(get) 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): def db_connect(db_name, serialize=0):
return PoolManager.get(db_name) return PoolManager.get(db_name)
def close_db(db_name):
return PoolManager.close(db_name)
# vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4: