Skip to content

Commit cdff28a

Browse files
committed
renamed querystring -> querystrings where appropriate
1 parent 328f6cd commit cdff28a

File tree

16 files changed

+99
-35
lines changed

16 files changed

+99
-35
lines changed

piccolo/engine/postgres.py

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ async def __anext__(self):
4949
async def __aenter__(self):
5050
self._transaction = self.connection.transaction()
5151
await self._transaction.start()
52-
querystring = self.query.querystring[0]
52+
querystring = self.query.querystrings[0]
5353
template, template_args = querystring.compile_string()
5454

5555
self._cursor = await self.connection.cursor(template, *template_args)
@@ -68,9 +68,12 @@ class Transaction:
6868
"""
6969
Usage:
7070
71-
transaction = engine.Transaction()
71+
transaction = engine.transaction()
7272
transaction.add(Foo.create_table())
73+
74+
# Either:
7375
transaction.run_sync()
76+
await transaction.run()
7477
"""
7578

7679
__slots__ = ("engine", "queries")
@@ -85,7 +88,7 @@ def add(self, *query: Query):
8588
async def _run_queries(self, connection):
8689
async with connection.transaction():
8790
for query in self.queries:
88-
for querystring in query.querystring:
91+
for querystring in query.querystrings:
8992
_query, args = querystring.compile_string(
9093
engine_type=self.engine.engine_type
9194
)

piccolo/engine/sqlite.py

Lines changed: 55 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1+
from __future__ import annotations
12
from dataclasses import dataclass
3+
import logging
24
import os
35
import sqlite3
46
import typing as t
@@ -11,6 +13,9 @@
1113
from piccolo.querystring import QueryString
1214

1315

16+
logger = logging.getLogger(__file__)
17+
18+
1419
@dataclass
1520
class AsyncBatch(Batch):
1621

@@ -41,7 +46,7 @@ async def __anext__(self):
4146
return response
4247

4348
async def __aenter__(self):
44-
querystring = self.query.querystring[0]
49+
querystring = self.query.querystrings[0]
4550
template, template_args = querystring.compile_string()
4651

4752
self._cursor = await self.connection.execute(template, *template_args)
@@ -56,6 +61,52 @@ async def __aexit__(self, exc_type, exc, tb):
5661
###############################################################################
5762

5863

64+
class Transaction:
65+
"""
66+
Usage:
67+
68+
transaction = engine.transaction()
69+
transaction.add(Foo.create_table())
70+
71+
# Either:
72+
transaction.run_sync()
73+
await transaction.run()
74+
"""
75+
76+
__slots__ = ("engine", "queries")
77+
78+
def __init__(self, engine: SQLiteEngine):
79+
self.engine = engine
80+
self.queries: t.List[Query] = []
81+
82+
def add(self, *query: Query):
83+
self.queries += list(query)
84+
85+
async def run(self):
86+
for query in self.queries:
87+
await self.engine.run("BEGIN")
88+
try:
89+
for querystring in query.querystrings:
90+
await self.engine.run(
91+
*querystring.compile_string(
92+
engine_type=self.engine_type
93+
),
94+
query_type=querystring.query_type,
95+
)
96+
except Exception as exception:
97+
logger.error(exception)
98+
await self.engine.run("ROLLBACK")
99+
else:
100+
await self.engine.run("COMMIT")
101+
self.queries = []
102+
103+
def run_sync(self):
104+
return run_sync(self._run())
105+
106+
107+
###############################################################################
108+
109+
59110
def dict_factory(cursor, row):
60111
d = {}
61112
for idx, col in enumerate(cursor.description):
@@ -120,7 +171,9 @@ async def batch(self, query: Query, batch_size=100) -> AsyncBatch:
120171

121172
async def get_connection(self) -> Connection:
122173
connection = await aiosqlite.connect(
123-
self.path, detect_types=sqlite3.PARSE_DECLTYPES
174+
self.path,
175+
detect_types=sqlite3.PARSE_DECLTYPES,
176+
isolation_level=None,
124177
)
125178
connection.row_factory = dict_factory
126179
return connection

piccolo/query/base.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,9 @@ async def run(self, in_pool=True):
9090
f"Table {self.table._meta.tablename} has no db defined in _meta"
9191
)
9292

93-
if len(self.querystring) == 1:
93+
if len(self.querystrings) == 1:
9494
results = await engine.run_querystring(
95-
self.querystring[0], in_pool=in_pool
95+
self.querystrings[0], in_pool=in_pool
9696
)
9797
return await self._process_results(results)
9898
else:
@@ -121,33 +121,33 @@ async def response_handler(self, response):
121121
###########################################################################
122122

123123
@property
124-
def sqlite_querystring(self) -> t.Sequence[QueryString]:
124+
def sqlite_querystrings(self) -> t.Sequence[QueryString]:
125125
raise NotImplementedError
126126

127127
@property
128-
def postgres_querystring(self) -> t.Sequence[QueryString]:
128+
def postgres_querystrings(self) -> t.Sequence[QueryString]:
129129
raise NotImplementedError
130130

131131
@property
132-
def default_querystring(self) -> t.Sequence[QueryString]:
132+
def default_querystrings(self) -> t.Sequence[QueryString]:
133133
raise NotImplementedError
134134

135135
@property
136-
def querystring(self) -> t.Sequence[QueryString]:
136+
def querystrings(self) -> t.Sequence[QueryString]:
137137
"""
138138
Calls the correct underlying method, depending on the current engine.
139139
"""
140140
engine_type = self.engine_type
141141
if engine_type == "postgres":
142142
try:
143-
return self.postgres_querystring
143+
return self.postgres_querystrings
144144
except NotImplementedError:
145-
return self.default_querystring
145+
return self.default_querystrings
146146
elif engine_type == "sqlite":
147147
try:
148-
return self.sqlite_querystring
148+
return self.sqlite_querystrings
149149
except NotImplementedError:
150-
return self.default_querystring
150+
return self.default_querystrings
151151
else:
152152
raise Exception(
153153
f"No querystring found for the {engine_type} engine."
@@ -156,4 +156,4 @@ def querystring(self) -> t.Sequence[QueryString]:
156156
###########################################################################
157157

158158
def __str__(self) -> str:
159-
return "; ".join([i.__str__() for i in self.querystring])
159+
return "; ".join([i.__str__() for i in self.querystrings])

piccolo/query/methods/alter.py

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ async def response_handler(self, response):
296296
return response
297297

298298
@property
299-
def querystring(self) -> t.Sequence[QueryString]:
299+
def querystrings(self) -> t.Sequence[QueryString]:
300300
if self._drop_table:
301301
return [QueryString(f'DROP TABLE "{self.table._meta.tablename}"')]
302302

@@ -318,6 +318,3 @@ def querystring(self) -> t.Sequence[QueryString]:
318318
query += ",".join([" {}" for i in alterations])
319319

320320
return [QueryString(query, *alterations)]
321-
322-
def __str__(self) -> str:
323-
return self.querystring.__str__()

piccolo/query/methods/count.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ async def response_handler(self, response) -> bool:
2323
return response[0]["count"]
2424

2525
@property
26-
def querystring(self) -> t.Sequence[QueryString]:
26+
def querystrings(self) -> t.Sequence[QueryString]:
2727
select = Select(self.table)
2828
select.where_delegate._where = self.where_delegate._where
2929
return [
3030
QueryString(
3131
'SELECT COUNT(*) AS "count" FROM ({}) AS "subquery"',
32-
select.querystring[0],
32+
select.querystrings[0],
3333
)
3434
]

piccolo/query/methods/create.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ class Create(Query):
1313
__slots__: t.Tuple = tuple()
1414

1515
@property
16-
def querystring(self) -> t.Sequence[QueryString]:
16+
def querystrings(self) -> t.Sequence[QueryString]:
1717
base = f"CREATE TABLE {self.table._meta.tablename}"
1818
columns = ", ".join(["{}" for i in self.table._meta.columns])
1919
query = f"{base} ({columns})"

piccolo/query/methods/delete.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def _validate(self):
3939
)
4040

4141
@property
42-
def querystring(self) -> t.Sequence[QueryString]:
42+
def querystrings(self) -> t.Sequence[QueryString]:
4343
query = f"DELETE FROM {self.table._meta.tablename}"
4444
if self.where_delegate._where:
4545
query += " WHERE {}"

piccolo/query/methods/exists.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,12 @@ async def response_handler(self, response) -> bool:
2323
return response[0]["exists"]
2424

2525
@property
26-
def querystring(self) -> t.Sequence[QueryString]:
26+
def querystrings(self) -> t.Sequence[QueryString]:
2727
select = Select(
2828
table=self.table,
2929
base=QueryString(f"SELECT * FROM {self.table._meta.tablename}"),
3030
)
3131
select.where_delegate._where = self.where_delegate._where
3232
return [
33-
QueryString('SELECT EXISTS({}) AS "exists"', select.querystring[0])
33+
QueryString('SELECT EXISTS({}) AS "exists"', select.querystrings[0])
3434
]

piccolo/query/methods/insert.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ def run_callback(self, results):
2727
self.add_delegate._add[index].id = row["id"]
2828

2929
@property
30-
def sqlite_querystring(self) -> t.Sequence[QueryString]:
30+
def sqlite_querystrings(self) -> t.Sequence[QueryString]:
3131
base = f"INSERT INTO {self.table._meta.tablename}"
3232
columns = ",".join([i._meta.name for i in self.table._meta.columns])
3333
values = ",".join(["{}" for i in self.add_delegate._add])
@@ -41,7 +41,7 @@ def sqlite_querystring(self) -> t.Sequence[QueryString]:
4141
]
4242

4343
@property
44-
def postgres_querystring(self) -> t.Sequence[QueryString]:
44+
def postgres_querystrings(self) -> t.Sequence[QueryString]:
4545
base = f"INSERT INTO {self.table._meta.tablename}"
4646
columns = ",".join(
4747
[f'"{i._meta.name}"' for i in self.table._meta.columns]

piccolo/query/methods/objects.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ async def response_handler(self, response):
7878
return response
7979

8080
@property
81-
def querystring(self) -> t.Sequence[QueryString]:
81+
def querystrings(self) -> t.Sequence[QueryString]:
8282
select = Select(table=self.table)
8383

8484
for attr in (
@@ -90,4 +90,4 @@ def querystring(self) -> t.Sequence[QueryString]:
9090
):
9191
setattr(select, attr, getattr(self, attr))
9292

93-
return select.querystring
93+
return select.querystrings

0 commit comments

Comments
 (0)