feat: Support for Column comparison in DatabaseQuery

This commit is contained in:
Gavin D'souza 2021-08-03 12:43:01 +05:30
parent 5f678a0d40
commit 77895bbcfc
3 changed files with 24 additions and 2 deletions

View file

@ -3,6 +3,7 @@
"""build query for doclistview and return results"""
import frappe.defaults
from frappe.query_builder.utils import Column
import frappe.share
from frappe import _
import frappe.permissions
@ -546,8 +547,12 @@ class DatabaseQuery(object):
value = flt(f.value)
fallback = 0
if isinstance(f.value, Column):
quote = '"' if frappe.conf.db_type == 'postgres' else "`"
value = f"{tname}.{quote}{f.value}{quote}"
# escape value
if isinstance(value, str) and not f.operator.lower() == 'between':
elif isinstance(value, str) and not f.operator.lower() == 'between':
value = f"{frappe.db.escape(value, percent=False)}"
if (

View file

@ -1 +1 @@
from frappe.query_builder.utils import get_query_builder
from frappe.query_builder.utils import Column, Data, get_query_builder

View file

@ -4,9 +4,26 @@ from typing import Any, Callable, Dict
from pypika import Query
import frappe
from .builder import MariaDB, Postgres
class Column:
"""Represents a Database Column"""
def __init__(self, name) -> None:
self.name = name
def __str__(self) -> str:
return self.name
class Data:
"""Represents a Data value...Specifically non column types"""
def __init__(self, name) -> None:
self.name = name
def __str__(self) -> str:
return self.name
class db_type_is(Enum):
MARIADB = "mariadb"
POSTGRES = "postgres"