42 lines
1.7 KiB
Python
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
|