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