server/sqlutils.py
changeset 10643 cfded6d0da11
parent 10411 4ee15441f2eb
child 10651 9ca33768473c
equal deleted inserted replaced
10628:8f32cdc3f4ec 10643:cfded6d0da11
    18 """SQL utilities functions and classes."""
    18 """SQL utilities functions and classes."""
    19 
    19 
    20 __docformat__ = "restructuredtext en"
    20 __docformat__ = "restructuredtext en"
    21 
    21 
    22 import sys
    22 import sys
    23 import os
       
    24 import re
    23 import re
    25 import subprocess
    24 import subprocess
    26 from os.path import abspath
    25 from os.path import abspath
    27 from itertools import ifilter
    26 from itertools import ifilter
    28 from logging import getLogger
    27 from logging import getLogger
       
    28 from datetime import time, datetime
    29 
    29 
    30 from logilab import database as db, common as lgc
    30 from logilab import database as db, common as lgc
    31 from logilab.common.shellutils import ProgressBar, DummyProgressBar
    31 from logilab.common.shellutils import ProgressBar, DummyProgressBar
    32 from logilab.common.deprecation import deprecated
    32 from logilab.common.deprecation import deprecated
    33 from logilab.common.logging_ext import set_log_methods
    33 from logilab.common.logging_ext import set_log_methods
       
    34 from logilab.common.date import utctime, utcdatetime
    34 from logilab.database.sqlgen import SQLGenerator
    35 from logilab.database.sqlgen import SQLGenerator
    35 
    36 
    36 from cubicweb import Binary, ConfigurationError
    37 from cubicweb import Binary, ConfigurationError
    37 from cubicweb.uilib import remove_html_tags
    38 from cubicweb.uilib import remove_html_tags
    38 from cubicweb.schema import PURE_VIRTUAL_RTYPES
    39 from cubicweb.schema import PURE_VIRTUAL_RTYPES
   371             newargs = {}
   372             newargs = {}
   372             for key, val in args.iteritems():
   373             for key, val in args.iteritems():
   373                 # convert cubicweb binary into db binary
   374                 # convert cubicweb binary into db binary
   374                 if isinstance(val, Binary):
   375                 if isinstance(val, Binary):
   375                     val = self._binary(val.getvalue())
   376                     val = self._binary(val.getvalue())
       
   377                 # convert timestamp to utc.
       
   378                 # expect SET TiME ZONE to UTC at connection opening time.
       
   379                 # This shouldn't change anything for datetime without TZ.
       
   380                 elif isinstance(val, datetime) and val.tzinfo is not None:
       
   381                     val = utcdatetime(val)
       
   382                 elif isinstance(val, time) and val.tzinfo is not None:
       
   383                     val = utctime(val)
   376                 newargs[key] = val
   384                 newargs[key] = val
   377             # should not collide
   385             # should not collide
       
   386             assert not (frozenset(newargs) & frozenset(query_args)), \
       
   387                 'unexpected collision: %s' % (frozenset(newargs) & frozenset(query_args))
   378             newargs.update(query_args)
   388             newargs.update(query_args)
   379             return newargs
   389             return newargs
   380         return query_args
   390         return query_args
   381 
   391 
   382     def process_result(self, cursor, cnx=None, column_callbacks=None):
   392     def process_result(self, cursor, cnx=None, column_callbacks=None):