2025-02-02 14:02:21 +01:00
|
|
|
# -*- coding: utf-8 -*-
|
|
|
|
|
|
|
|
|
|
from typing import Any
|
|
|
|
|
|
|
|
|
|
import abc
|
|
|
|
|
|
|
|
|
|
from jwutils.log import *
|
|
|
|
|
from jwutils.misc import load_classes
|
|
|
|
|
from jwutils.Cmds import Cmds
|
|
|
|
|
from jwutils.db.DataBase import DataBase
|
2025-03-10 18:44:39 +01:00
|
|
|
from jwutils.db.Session import Session
|
2025-02-02 14:02:21 +01:00
|
|
|
from jwutils.db.query.QueryResult import QueryResult
|
|
|
|
|
#from jwutils.db.query.Queries import Queries
|
|
|
|
|
|
|
|
|
|
class Query(abc.ABC): # export
|
|
|
|
|
|
|
|
|
|
def __init__(self, parent: Any) -> None:
|
|
|
|
|
self.__parent = parent
|
|
|
|
|
|
|
|
|
|
# -- pure virtuals
|
|
|
|
|
|
|
|
|
|
@abc.abstractmethod
|
2025-03-10 18:44:39 +01:00
|
|
|
def _run(self, session: Session, *args, **kwargs) -> QueryResult:
|
2025-02-02 14:02:21 +01:00
|
|
|
raise Exception('Called pure virtual _run()')
|
|
|
|
|
|
|
|
|
|
@abc.abstractmethod
|
|
|
|
|
def _register(self):
|
|
|
|
|
raise Exception('Called pure virtual _register()')
|
|
|
|
|
|
|
|
|
|
@abc.abstractmethod
|
|
|
|
|
def _column_names(self) -> list[str]:
|
|
|
|
|
raise Exception('Called pure virtual _column()')
|
|
|
|
|
|
|
|
|
|
# -- used by Queries class
|
|
|
|
|
|
|
|
|
|
def register(self):
|
|
|
|
|
return self._register()
|
|
|
|
|
|
|
|
|
|
# -- to be used
|
|
|
|
|
|
|
|
|
|
def _add(self, query_name: str, location: str, func: Any):
|
|
|
|
|
return self.__parent.add(self, query_name, location, func)
|
|
|
|
|
|
2025-03-10 18:44:39 +01:00
|
|
|
def run(self, session: Session, *args, **kwargs) -> QueryResult:
|
|
|
|
|
return self._run(session, *args, **kwargs)
|
2025-02-02 14:02:21 +01:00
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def parent(self):
|
|
|
|
|
return self.__parent
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def db(self) -> DataBase:
|
|
|
|
|
return self.__parent.db
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def schema(self):
|
|
|
|
|
return self.__parent.db.schema
|
|
|
|
|
|
|
|
|
|
@property
|
|
|
|
|
def column_names(self) -> list[str]:
|
|
|
|
|
return self._column_names()
|