1*cda5da8dSAndroid Build Coastguard Worker# pysqlite2/dbapi2.py: the DB-API 2.0 interface 2*cda5da8dSAndroid Build Coastguard Worker# 3*cda5da8dSAndroid Build Coastguard Worker# Copyright (C) 2004-2005 Gerhard Häring <[email protected]> 4*cda5da8dSAndroid Build Coastguard Worker# 5*cda5da8dSAndroid Build Coastguard Worker# This file is part of pysqlite. 6*cda5da8dSAndroid Build Coastguard Worker# 7*cda5da8dSAndroid Build Coastguard Worker# This software is provided 'as-is', without any express or implied 8*cda5da8dSAndroid Build Coastguard Worker# warranty. In no event will the authors be held liable for any damages 9*cda5da8dSAndroid Build Coastguard Worker# arising from the use of this software. 10*cda5da8dSAndroid Build Coastguard Worker# 11*cda5da8dSAndroid Build Coastguard Worker# Permission is granted to anyone to use this software for any purpose, 12*cda5da8dSAndroid Build Coastguard Worker# including commercial applications, and to alter it and redistribute it 13*cda5da8dSAndroid Build Coastguard Worker# freely, subject to the following restrictions: 14*cda5da8dSAndroid Build Coastguard Worker# 15*cda5da8dSAndroid Build Coastguard Worker# 1. The origin of this software must not be misrepresented; you must not 16*cda5da8dSAndroid Build Coastguard Worker# claim that you wrote the original software. If you use this software 17*cda5da8dSAndroid Build Coastguard Worker# in a product, an acknowledgment in the product documentation would be 18*cda5da8dSAndroid Build Coastguard Worker# appreciated but is not required. 19*cda5da8dSAndroid Build Coastguard Worker# 2. Altered source versions must be plainly marked as such, and must not be 20*cda5da8dSAndroid Build Coastguard Worker# misrepresented as being the original software. 21*cda5da8dSAndroid Build Coastguard Worker# 3. This notice may not be removed or altered from any source distribution. 22*cda5da8dSAndroid Build Coastguard Worker 23*cda5da8dSAndroid Build Coastguard Workerimport datetime 24*cda5da8dSAndroid Build Coastguard Workerimport time 25*cda5da8dSAndroid Build Coastguard Workerimport collections.abc 26*cda5da8dSAndroid Build Coastguard Worker 27*cda5da8dSAndroid Build Coastguard Workerfrom _sqlite3 import * 28*cda5da8dSAndroid Build Coastguard Worker 29*cda5da8dSAndroid Build Coastguard Workerparamstyle = "qmark" 30*cda5da8dSAndroid Build Coastguard Worker 31*cda5da8dSAndroid Build Coastguard Workerapilevel = "2.0" 32*cda5da8dSAndroid Build Coastguard Worker 33*cda5da8dSAndroid Build Coastguard WorkerDate = datetime.date 34*cda5da8dSAndroid Build Coastguard Worker 35*cda5da8dSAndroid Build Coastguard WorkerTime = datetime.time 36*cda5da8dSAndroid Build Coastguard Worker 37*cda5da8dSAndroid Build Coastguard WorkerTimestamp = datetime.datetime 38*cda5da8dSAndroid Build Coastguard Worker 39*cda5da8dSAndroid Build Coastguard Workerdef DateFromTicks(ticks): 40*cda5da8dSAndroid Build Coastguard Worker return Date(*time.localtime(ticks)[:3]) 41*cda5da8dSAndroid Build Coastguard Worker 42*cda5da8dSAndroid Build Coastguard Workerdef TimeFromTicks(ticks): 43*cda5da8dSAndroid Build Coastguard Worker return Time(*time.localtime(ticks)[3:6]) 44*cda5da8dSAndroid Build Coastguard Worker 45*cda5da8dSAndroid Build Coastguard Workerdef TimestampFromTicks(ticks): 46*cda5da8dSAndroid Build Coastguard Worker return Timestamp(*time.localtime(ticks)[:6]) 47*cda5da8dSAndroid Build Coastguard Worker 48*cda5da8dSAndroid Build Coastguard Workerversion_info = tuple([int(x) for x in version.split(".")]) 49*cda5da8dSAndroid Build Coastguard Workersqlite_version_info = tuple([int(x) for x in sqlite_version.split(".")]) 50*cda5da8dSAndroid Build Coastguard Worker 51*cda5da8dSAndroid Build Coastguard WorkerBinary = memoryview 52*cda5da8dSAndroid Build Coastguard Workercollections.abc.Sequence.register(Row) 53*cda5da8dSAndroid Build Coastguard Worker 54*cda5da8dSAndroid Build Coastguard Workerdef register_adapters_and_converters(): 55*cda5da8dSAndroid Build Coastguard Worker def adapt_date(val): 56*cda5da8dSAndroid Build Coastguard Worker return val.isoformat() 57*cda5da8dSAndroid Build Coastguard Worker 58*cda5da8dSAndroid Build Coastguard Worker def adapt_datetime(val): 59*cda5da8dSAndroid Build Coastguard Worker return val.isoformat(" ") 60*cda5da8dSAndroid Build Coastguard Worker 61*cda5da8dSAndroid Build Coastguard Worker def convert_date(val): 62*cda5da8dSAndroid Build Coastguard Worker return datetime.date(*map(int, val.split(b"-"))) 63*cda5da8dSAndroid Build Coastguard Worker 64*cda5da8dSAndroid Build Coastguard Worker def convert_timestamp(val): 65*cda5da8dSAndroid Build Coastguard Worker datepart, timepart = val.split(b" ") 66*cda5da8dSAndroid Build Coastguard Worker year, month, day = map(int, datepart.split(b"-")) 67*cda5da8dSAndroid Build Coastguard Worker timepart_full = timepart.split(b".") 68*cda5da8dSAndroid Build Coastguard Worker hours, minutes, seconds = map(int, timepart_full[0].split(b":")) 69*cda5da8dSAndroid Build Coastguard Worker if len(timepart_full) == 2: 70*cda5da8dSAndroid Build Coastguard Worker microseconds = int('{:0<6.6}'.format(timepart_full[1].decode())) 71*cda5da8dSAndroid Build Coastguard Worker else: 72*cda5da8dSAndroid Build Coastguard Worker microseconds = 0 73*cda5da8dSAndroid Build Coastguard Worker 74*cda5da8dSAndroid Build Coastguard Worker val = datetime.datetime(year, month, day, hours, minutes, seconds, microseconds) 75*cda5da8dSAndroid Build Coastguard Worker return val 76*cda5da8dSAndroid Build Coastguard Worker 77*cda5da8dSAndroid Build Coastguard Worker 78*cda5da8dSAndroid Build Coastguard Worker register_adapter(datetime.date, adapt_date) 79*cda5da8dSAndroid Build Coastguard Worker register_adapter(datetime.datetime, adapt_datetime) 80*cda5da8dSAndroid Build Coastguard Worker register_converter("date", convert_date) 81*cda5da8dSAndroid Build Coastguard Worker register_converter("timestamp", convert_timestamp) 82*cda5da8dSAndroid Build Coastguard Worker 83*cda5da8dSAndroid Build Coastguard Workerregister_adapters_and_converters() 84*cda5da8dSAndroid Build Coastguard Worker 85*cda5da8dSAndroid Build Coastguard Worker# bpo-24464: enable_shared_cache was deprecated in Python 3.10. It's 86*cda5da8dSAndroid Build Coastguard Worker# scheduled for removal in Python 3.12. 87*cda5da8dSAndroid Build Coastguard Workerdef enable_shared_cache(enable): 88*cda5da8dSAndroid Build Coastguard Worker from _sqlite3 import enable_shared_cache as _old_enable_shared_cache 89*cda5da8dSAndroid Build Coastguard Worker import warnings 90*cda5da8dSAndroid Build Coastguard Worker msg = ( 91*cda5da8dSAndroid Build Coastguard Worker "enable_shared_cache is deprecated and will be removed in Python 3.12. " 92*cda5da8dSAndroid Build Coastguard Worker "Shared cache is strongly discouraged by the SQLite 3 documentation. " 93*cda5da8dSAndroid Build Coastguard Worker "If shared cache must be used, open the database in URI mode using" 94*cda5da8dSAndroid Build Coastguard Worker "the cache=shared query parameter." 95*cda5da8dSAndroid Build Coastguard Worker ) 96*cda5da8dSAndroid Build Coastguard Worker warnings.warn(msg, DeprecationWarning, stacklevel=2) 97*cda5da8dSAndroid Build Coastguard Worker return _old_enable_shared_cache(enable) 98*cda5da8dSAndroid Build Coastguard Worker 99*cda5da8dSAndroid Build Coastguard Worker# Clean up namespace 100*cda5da8dSAndroid Build Coastguard Worker 101*cda5da8dSAndroid Build Coastguard Workerdel(register_adapters_and_converters) 102