2022-08-19 12:00:26 +09:00

42 lines
1.7 KiB
Python

import textwrap
from src.config.objects import LastFetchDatetime, TargetObject
from src.system_var.environments import FETCH_LIMIT_CLAUSE
class SOQLBuilder:
def __init__(self, target_object: TargetObject, last_fetch_datetime: LastFetchDatetime) -> None:
self.__SELECT_SOQL = textwrap.dedent("""\
SELECT {column_or_expression} FROM {object_name}
WHERE {datetime_column} > {last_fetch_datetime_from}
AND {datetime_column} <= {last_fetch_datetime_to}
{limit_clause}
""")
self.__target_object = target_object
self.__last_fetch_datetime = last_fetch_datetime
def create_count_soql(self):
count_soql = self.__SELECT_SOQL.format(
column_or_expression='COUNT(Id)',
object_name=self.__target_object.object_name,
last_fetch_datetime_from=self.__last_fetch_datetime.last_fetch_datetime_from,
last_fetch_datetime_to=self.__last_fetch_datetime.last_fetch_datetime_to,
datetime_column=self.__target_object.datetime_column,
limit_clause=''
)
return count_soql
def create_fetch_soql(self):
columns = ','.join(self.__target_object.columns)
fetch_soql = self.__SELECT_SOQL.format(
column_or_expression=columns,
object_name=self.__target_object.object_name,
last_fetch_datetime_from=self.__last_fetch_datetime.last_fetch_datetime_from,
last_fetch_datetime_to=self.__last_fetch_datetime.last_fetch_datetime_to,
datetime_column=self.__target_object.datetime_column,
limit_clause=FETCH_LIMIT_CLAUSE
)
return fetch_soql