jw-python/tools/python/jwutils/db/query/QueryResult.py
Jan Lindemann 4cc9906055 db.query: Add Query, QueryResult, Queries
Signed-off-by: Jan Lindemann <jan@janware.com>
2025-02-02 14:02:21 +01:00

56 lines
1.2 KiB
Python

# -*- coding: utf-8 -*-
from typing import Any, Union
import abc
from enum import Enum, auto
from jwutils.log import *
from jwutils.Cmds import Cmds
from jwutils.db.DataBase import DataBase
class ResType(Enum): # export
Statement = auto()
Scalars = auto()
One = auto()
First = auto()
Pages = auto()
class QueryResult(abc.ABC): # export
def __init__(self, query: Any) -> None:
self.__query = query
@property
def app(self) -> Cmds:
return self.__query.app
@property
def db(self) -> DataBase:
return self.__query.db
@property
def schema(self):
return self.__query.db.schema
def rows(self) -> list[Any]:
return self._cast(ResType.Scalars)
def pages(self, per_page=20) -> Any:
return self._cast(ResType.Pages, per_page=per_page)
def one(self) -> Any:
return self._cast(ResType.One)
def first(self) -> Any:
return self._cast(ResType.First)
@property
def statement(self) -> Any:
return self._cast(ResType.Statement)
# -- pure virtuals
@abc.abstractmethod
def _cast(self, res_type: ResType, **kwargs) -> Union[Any|list[Any]]:
pass