[FIX] psycopg2: convert types & update web_services
bzr revid: christophe@tinyerp.com-20081209133132-wn7v8d2qyo3cv6x5
This commit is contained in:
parent
c2cc3a3049
commit
822da77ee6
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue