add sql filter "contains"
This commit is contained in:
@@ -11,12 +11,13 @@ from typing import (
|
||||
TYPE_CHECKING,
|
||||
)
|
||||
from pydantic import BaseModel
|
||||
from sqlmodel import SQLModel, BigInteger, Field, select, func, column
|
||||
from sqlmodel import SQLModel, BigInteger, Field, select, func, column, col
|
||||
|
||||
from sqlmodel.ext.asyncio.session import AsyncSession
|
||||
from sqlmodel.sql.expression import SelectOfScalar
|
||||
from sqlmodel.main import SQLModelMetaclass, RelationshipInfo
|
||||
|
||||
|
||||
from .descriptors import EntityDescriptor, EntityField, FieldDescriptor, Filter
|
||||
from .entity_metadata import EntityMetadata
|
||||
from . import session_dep
|
||||
@@ -233,30 +234,33 @@ class BotEntity[CreateSchemaType: BaseModel, UpdateSchemaType: BaseModel](
|
||||
cls, select_statement: SelectOfScalar[Self], static_filter: list[Filter]
|
||||
):
|
||||
for sfilt in static_filter:
|
||||
column = col(getattr(cls, sfilt.field_name))
|
||||
if sfilt.operator == "==":
|
||||
condition = column(sfilt.field_name).__eq__(sfilt.value)
|
||||
condition = column.__eq__(sfilt.value)
|
||||
elif sfilt.operator == "!=":
|
||||
condition = column(sfilt.field_name).__ne__(sfilt.value)
|
||||
condition = column.__ne__(sfilt.value)
|
||||
elif sfilt.operator == "<":
|
||||
condition = column(sfilt.field_name).__lt__(sfilt.value)
|
||||
condition = column.__lt__(sfilt.value)
|
||||
elif sfilt.operator == "<=":
|
||||
condition = column(sfilt.field_name).__le__(sfilt.value)
|
||||
condition = column.__le__(sfilt.value)
|
||||
elif sfilt.operator == ">":
|
||||
condition = column(sfilt.field_name).__gt__(sfilt.value)
|
||||
condition = column.__gt__(sfilt.value)
|
||||
elif sfilt.operator == ">=":
|
||||
condition = column(sfilt.field_name).__ge__(sfilt.value)
|
||||
condition = column.__ge__(sfilt.value)
|
||||
elif sfilt.operator == "ilike":
|
||||
condition = column(sfilt.field_name).ilike(f"%{sfilt.value}%")
|
||||
condition = column.ilike(f"%{sfilt.value}%")
|
||||
elif sfilt.operator == "like":
|
||||
condition = column(sfilt.field_name).like(f"%{sfilt.value}%")
|
||||
condition = column.like(f"%{sfilt.value}%")
|
||||
elif sfilt.operator == "in":
|
||||
condition = column(sfilt.field_name).in_(sfilt.value)
|
||||
condition = column.in_(sfilt.value)
|
||||
elif sfilt.operator == "not in":
|
||||
condition = column(sfilt.field_name).notin_(sfilt.value)
|
||||
elif sfilt.operator == "is":
|
||||
condition = column(sfilt.field_name).is_(None)
|
||||
elif sfilt.operator == "is not":
|
||||
condition = column(sfilt.field_name).isnot(None)
|
||||
condition = column.notin_(sfilt.value)
|
||||
elif sfilt.operator == "is none":
|
||||
condition = column.is_(None)
|
||||
elif sfilt.operator == "is not none":
|
||||
condition = column.isnot(None)
|
||||
elif sfilt.operator == "contains":
|
||||
condition = sfilt.value == column.any_()
|
||||
else:
|
||||
condition = None
|
||||
if condition is not None:
|
||||
|
||||
Reference in New Issue
Block a user