class SQLCondition:
    column: str
    operator: str
    param: str
    literal: bool

    def __init__(self, column: str, operator: str, param: str, literal=False) -> None:
        """
        Args:
            column (str): カラム名
            operator (str): 比較演算子
            param (str): パラメータ(プレースホルダーかリテラル値か)
            literal (bool, optional): リテラル値を埋め込むかどうか。
            画面から渡ってきた値を使うとSQLインジェクションの危険性があるため、固定値で使用すること。
        """
        self.column = column
        self.operator = operator
        self.param = param
        self.literal = literal

    def apply(self):
        # literalがFalseならプレースホルダー。Trueだったならは固定値。
        param = f':{self.param}' if self.literal is False else self.param
        return f' {self.column} {self.operator} {param}'


# 定数
EQ = '='
NE = '<>'
GT = '>'
LT = '<'
GE = '>='
LE = '<='
LIKE = 'LIKE'
IS = 'IS'
IS_NOT = 'IS NOT'
