Coverage for databases/sync_tests/types/raw_queries/test_decimal.py: 100%
23 statements
« prev ^ index » next coverage.py v7.2.7, created at 2024-04-28 15:17 +0000
« prev ^ index » next coverage.py v7.2.7, created at 2024-04-28 15:17 +0000
1from decimal import Decimal
3from pydantic import BaseModel
5from prisma import Prisma
6from prisma.models import Types
8from ...._types import DatabaseMapping, SupportedDatabase
9from ...._compat import LiteralString
12class Queries(BaseModel):
13 select: LiteralString
16_mysql_queries = Queries(
17 select='SELECT * FROM Types WHERE decimal_ = ?',
18)
20_postgresql_queries = Queries(
21 select='SELECT * FROM "Types" WHERE decimal_ = $1::numeric',
22)
24RAW_QUERIES: DatabaseMapping[Queries] = {
25 'mysql': _mysql_queries,
26 'mariadb': _mysql_queries,
27 'sqlite': Queries(
28 select='SELECT * FROM Types WHERE decimal_ = ?',
29 ),
30 'postgresql': _postgresql_queries,
31 'cockroachdb': _postgresql_queries,
32}
35def test_query_first(
36 client: Prisma,
37 database: SupportedDatabase,
38) -> None:
39 """Standard usage of decimal_ in raw SELECT queries"""
40 queries = RAW_QUERIES[database]
42 record = client.types.create({'decimal_': Decimal(1)})
44 found = client.query_first(queries.select, Decimal(1))
45 assert found['id'] == record.id
46 assert found['decimal_'] == 1
48 record2 = client.types.create({'decimal_': Decimal('1.24343336464224')})
50 found = client.query_first(queries.select, Decimal('1.24343336464224'))
51 assert found['id'] == record2.id
52 assert found['decimal_'] == 1.24343336464224
54 model = client.query_first(queries.select, Decimal('1.24343336464224'), model=Types)
55 assert model is not None
56 assert model.id == record2.id
57 assert model.decimal_ == Decimal('1.24343336464224')