Skip to content

Commit baa9f3f

Browse files
committed
fixes #11
1 parent b264e48 commit baa9f3f

File tree

1 file changed

+22
-11
lines changed

1 file changed

+22
-11
lines changed

apswutils/db.py

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,25 @@
11
# This file is from sqlite-utils and copyright and license is the same as that project
22
__all__ = ['Database', 'Queryable', 'Table', 'View']
33

4-
from .utils import ( chunks, hash_record, sqlite3, OperationalError, suggest_column_types, types_for_column_types, column_affinity, find_spatialite,)
5-
import binascii
4+
from .utils import chunks, hash_record, sqlite3, OperationalError, suggest_column_types, types_for_column_types, column_affinity, find_spatialite
65
from collections import namedtuple
76
from collections.abc import Mapping
8-
import contextlib, datetime, decimal, inspect, itertools, json, os, pathlib, re, secrets, textwrap
9-
from typing import ( cast, Any, Callable, Dict, Generator, Iterable, Union, Optional, List, Tuple,Iterator)
7+
from typing import cast, Any, Callable, Dict, Generator, Iterable, Union, Optional, List, Tuple, Iterator
108
from functools import cache
11-
import uuid
12-
import apsw.ext
13-
import apsw.bestpractice
9+
import contextlib, datetime, decimal, inspect, itertools, json, os, pathlib, re, secrets, textwrap, binascii, uuid, logging
10+
import apsw.ext, apsw.bestpractice
1411

15-
# We don't use apsw.bestpractice.connection_dqs because sqlite-utils
16-
# allowed doublequotes
12+
logger = logging.getLogger('apsw')
13+
logger.setLevel(logging.ERROR)
14+
apsw.ext.log_sqlite(logger=logger)
15+
16+
# We don't use bestpractice.connection_dqs because sqlite-utils allowed doublequotes
1717
apsw.bestpractice.apply((
1818
apsw.bestpractice.connection_busy_timeout,
1919
apsw.bestpractice.connection_enable_foreign_keys,
2020
apsw.bestpractice.connection_optimize,
2121
apsw.bestpractice.connection_recursive_triggers,
22-
apsw.bestpractice.connection_wal,
23-
apsw.bestpractice.library_logging
22+
apsw.bestpractice.connection_wal
2423
))
2524

2625
try: from sqlite_dump import iterdump
@@ -445,6 +444,18 @@ def executescript(self, sql: str) -> sqlite3.Cursor:
445444
self._tracer(sql, None)
446445
return self.conn.execute(sql)
447446

447+
def modify_table_schema(self, tbl_name:str, schema:str):
448+
"""
449+
Modify table `tbl_name` to use `schema`.
450+
451+
:param tbl_name: Table to modify schema
452+
:param schema: New schema
453+
"""
454+
self.execute("PRAGMA writable_schema=ON")
455+
self.execute(f"UPDATE sqlite_master SET sql = '{schema}' WHERE type='table' AND name='{tbl_name}'")
456+
self.execute("PRAGMA writable_schema=OFF")
457+
self.execute("VACUUM") # force sqlite to reload connections
458+
448459
def __hash__(self): return hash(self.conn)
449460

450461
def convert_lists_to_tuples(function):

0 commit comments

Comments
 (0)