Interval based triggers
Monetdb get col/sz Updated RF/dataproc Bug fixes and improvements
This commit is contained in:
@@ -5,20 +5,18 @@
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# Contact: Kyle Lahnakoski (kyle@lahnakoski.com)
|
||||
#
|
||||
# Bill Sun 2022 - 2023
|
||||
|
||||
from __future__ import absolute_import, division, unicode_literals
|
||||
|
||||
import json
|
||||
from threading import Lock
|
||||
|
||||
from aquery_parser.sql_parser import scrub
|
||||
from aquery_parser.parser import scrub
|
||||
from aquery_parser.utils import ansi_string, simple_op, normal_op
|
||||
|
||||
import aquery_parser.parser
|
||||
parse_locker = Lock() # ENSURE ONLY ONE PARSING AT A TIME
|
||||
common_parser = None
|
||||
mysql_parser = None
|
||||
sqlserver_parser = None
|
||||
|
||||
SQL_NULL = {"null": {}}
|
||||
|
||||
@@ -33,44 +31,10 @@ def parse(sql, null=SQL_NULL, calls=simple_op):
|
||||
|
||||
with parse_locker:
|
||||
if not common_parser:
|
||||
common_parser = sql_parser.common_parser()
|
||||
common_parser = aquery_parser.parser.common_parser()
|
||||
result = _parse(common_parser, sql, null, calls)
|
||||
return result
|
||||
|
||||
|
||||
def parse_mysql(sql, null=SQL_NULL, calls=simple_op):
|
||||
"""
|
||||
PARSE MySQL ASSUME DOUBLE QUOTED STRINGS ARE LITERALS
|
||||
:param sql: String of SQL
|
||||
:param null: What value to use as NULL (default is the null function `{"null":{}}`)
|
||||
:return: parse tree
|
||||
"""
|
||||
global mysql_parser
|
||||
|
||||
with parse_locker:
|
||||
if not mysql_parser:
|
||||
mysql_parser = sql_parser.mysql_parser()
|
||||
return _parse(mysql_parser, sql, null, calls)
|
||||
|
||||
|
||||
def parse_sqlserver(sql, null=SQL_NULL, calls=simple_op):
|
||||
"""
|
||||
PARSE MySQL ASSUME DOUBLE QUOTED STRINGS ARE LITERALS
|
||||
:param sql: String of SQL
|
||||
:param null: What value to use as NULL (default is the null function `{"null":{}}`)
|
||||
:return: parse tree
|
||||
"""
|
||||
global sqlserver_parser
|
||||
|
||||
with parse_locker:
|
||||
if not sqlserver_parser:
|
||||
sqlserver_parser = sql_parser.sqlserver_parser()
|
||||
return _parse(sqlserver_parser, sql, null, calls)
|
||||
|
||||
|
||||
parse_bigquery = parse_mysql
|
||||
|
||||
|
||||
def _parse(parser, sql, null, calls):
|
||||
utils.null_locations = []
|
||||
utils.scrub_op = calls
|
||||
@@ -85,4 +49,4 @@ def _parse(parser, sql, null, calls):
|
||||
|
||||
_ = json.dumps
|
||||
|
||||
__all__ = ["parse", "format", "parse_mysql", "parse_bigquery", "normal_op", "simple_op"]
|
||||
__all__ = ["parse", "format", "normal_op", "simple_op"]
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# Contact: Kyle Lahnakoski (kyle@lahnakoski.com)
|
||||
#
|
||||
# Bill Sun 2022 - 2023
|
||||
|
||||
# SQL CONSTANTS
|
||||
from mo_parsing import *
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# Contact: Kyle Lahnakoski (kyle@lahnakoski.com)
|
||||
#
|
||||
# Bill Sun 2022 - 2023
|
||||
|
||||
from sre_parse import WHITESPACE
|
||||
|
||||
@@ -28,37 +28,12 @@ simple_ident = Regex(simple_ident.__regex__()[1])
|
||||
|
||||
def common_parser():
|
||||
combined_ident = Combine(delimited_list(
|
||||
ansi_ident | mysql_backtick_ident | simple_ident, separator=".", combine=True,
|
||||
ansi_ident | aquery_backtick_ident | simple_ident, separator=".", combine=True,
|
||||
)).set_parser_name("identifier")
|
||||
|
||||
return parser(ansi_string | mysql_doublequote_string, combined_ident)
|
||||
return parser(ansi_string | aquery_doublequote_string, combined_ident)
|
||||
|
||||
|
||||
def mysql_parser():
|
||||
mysql_string = ansi_string | mysql_doublequote_string
|
||||
mysql_ident = Combine(delimited_list(
|
||||
mysql_backtick_ident | sqlserver_ident | simple_ident,
|
||||
separator=".",
|
||||
combine=True,
|
||||
)).set_parser_name("mysql identifier")
|
||||
|
||||
return parser(mysql_string, mysql_ident)
|
||||
|
||||
|
||||
def sqlserver_parser():
|
||||
combined_ident = Combine(delimited_list(
|
||||
ansi_ident
|
||||
| mysql_backtick_ident
|
||||
| sqlserver_ident
|
||||
| Word(FIRST_IDENT_CHAR, IDENT_CHAR),
|
||||
separator=".",
|
||||
combine=True,
|
||||
)).set_parser_name("identifier")
|
||||
|
||||
return parser(ansi_string, combined_ident, sqlserver=True)
|
||||
|
||||
|
||||
def parser(literal_string, ident, sqlserver=False):
|
||||
def parser(literal_string, ident):
|
||||
with Whitespace() as engine:
|
||||
engine.add_ignore(Literal("--") + restOfLine)
|
||||
engine.add_ignore(Literal("#") + restOfLine)
|
||||
@@ -184,12 +159,10 @@ def parser(literal_string, ident, sqlserver=False):
|
||||
)
|
||||
)
|
||||
|
||||
if not sqlserver:
|
||||
# SQL SERVER DOES NOT SUPPORT [] FOR ARRAY CONSTRUCTION (USED FOR IDENTIFIERS)
|
||||
create_array = (
|
||||
Literal("[") + delimited_list(Group(expr))("args") + Literal("]")
|
||||
| create_array
|
||||
)
|
||||
create_array = (
|
||||
Literal("[") + delimited_list(Group(expr))("args") + Literal("]")
|
||||
| create_array
|
||||
)
|
||||
|
||||
create_array = create_array / to_array
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# Contact: Kyle Lahnakoski (kyle@lahnakoski.com)
|
||||
#
|
||||
# Bill Sun 2022 - 2023
|
||||
|
||||
|
||||
# KNOWN TYPES
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
# You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
# Contact: Kyle Lahnakoski (kyle@lahnakoski.com)
|
||||
#
|
||||
# Bill Sun 2022 - 2023
|
||||
|
||||
import ast
|
||||
|
||||
@@ -610,9 +610,8 @@ hex_num = (
|
||||
|
||||
# STRINGS
|
||||
ansi_string = Regex(r"\'(\'\'|[^'])*\'") / to_string
|
||||
mysql_doublequote_string = Regex(r'\"(\"\"|[^"])*\"') / to_string
|
||||
aquery_doublequote_string = Regex(r'\"(\"\"|[^"])*\"') / to_string
|
||||
|
||||
# BASIC IDENTIFIERS
|
||||
ansi_ident = Regex(r'\"(\"\"|[^"])*\"') / unquote
|
||||
mysql_backtick_ident = Regex(r"\`(\`\`|[^`])*\`") / unquote
|
||||
sqlserver_ident = Regex(r"\[(\]\]|[^\]])*\]") / unquote
|
||||
aquery_backtick_ident = Regex(r"\`(\`\`|[^`])*\`") / unquote
|
||||
|
||||
Reference in New Issue
Block a user