From e9c418d7a9d576b4cac7bbf3a03820c2284d0286 Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Mon, 13 Mar 2017 16:32:51 +0530 Subject: [PATCH 01/10] Update scan_utils.ex --- lib/sql_dust/utils/scan_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index e7b0e36..0825c8a 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -76,7 +76,7 @@ defmodule SqlDust.ScanUtils do end def scan_reserved_words(sql) do - Regex.scan(~r/\b(distinct|and|or|is|like|rlike|regexp|in|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) + Regex.scan(~r/\b(distinct|and|or|is|like|rlike|interval|regexp|in|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) end def numerize_patterns(sql, patterns) do From 3e93cb5f6b3dde9dec8aaf8b0f3c260b00fb6a9a Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Mon, 13 Mar 2017 16:53:59 +0530 Subject: [PATCH 02/10] Update scan_utils.ex --- lib/sql_dust/utils/scan_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index 0825c8a..d6df2c7 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -76,7 +76,7 @@ defmodule SqlDust.ScanUtils do end def scan_reserved_words(sql) do - Regex.scan(~r/\b(distinct|and|or|is|like|rlike|interval|regexp|in|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) + Regex.scan(~r/\b(distinct|and|or|is|like|rlike|interval|week|month|dow|day|quarter|year|date|integer|float|text|regexp|in|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) end def numerize_patterns(sql, patterns) do From fab33430ac0067bcf3423fa8ff7c7d4c5699d6f0 Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Mon, 13 Mar 2017 17:20:21 +0530 Subject: [PATCH 03/10] Update scan_utils.ex --- lib/sql_dust/utils/scan_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index d6df2c7..1eb391f 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -76,7 +76,7 @@ defmodule SqlDust.ScanUtils do end def scan_reserved_words(sql) do - Regex.scan(~r/\b(distinct|and|or|is|like|rlike|interval|week|month|dow|day|quarter|year|date|integer|float|text|regexp|in|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) + Regex.scan(~r/\b(a|abort|abs|absolute|access|action|ada|add|admin|after|aggregate|alias|all|allocate|also|alter|always|analyse|analyze|and|any|are|array|as|asc|asensitive|assertion|assignment|asymmetric|at|atomic|attribute|attributes|audit|authorization|auto_increment|avg|avg_row_length|backup|backward|before|begin|bernoulli|between|bigint|binary|bit|bit_length|bitvar|blob|bool|boolean|both|breadth|break|browse|bulk|by|c|cache|call|called|cardinality|cascade|cascaded|case|cast|catalog|catalog_name|ceil|ceiling|chain|change|char|char_length|character|character_length|character_set_catalog|character_set_name|character_set_schema|characteristics|characters|check|checked|checkpoint|checksum|class|class_origin|clob|close|cluster|clustered|coalesce|cobol|collate|collation|collation_catalog|collation_name|collation_schema|collect|column|column_name|columns|command_function|command_function_code|comment|commit|committed|completion|compress|compute|condition|condition_number|connect|connection|connection_name|constraint|constraint_catalog|constraint_name|constraint_schema|constraints|constructor|contains|containstable|continue|conversion|convert|copy|corr|corresponding|count|covar_pop|covar_samp|create|createdb|createrole|createuser|cross|csv|cube|cume_dist|current|current_date|current_default_transform_group|current_path|current_role|current_time|current_timestamp|current_transform_group_for_type|current_user|cursor|cursor_name|cycle|data|database|databases|date|datetime|datetime_interval_code|datetime_interval_precision|day|day_hour|day_microsecond|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dbcc|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|defined|definer|degree|delay_key_write|delayed|delete|delimiter|delimiters|dense_rank|deny|depth|deref|derived|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disable|disconnect|disk|dispatch|distinct|distinctrow|distributed|div|do|domain|double|drop|dual|dummy|dump|dynamic|dynamic_function|dynamic_function_code|each|element|else|elseif|enable|enclosed|encoding|encrypted|end|end-exec|enum|equals|errlvl|escape|escaped|every|except|exception|exclude|excluding|exclusive|exec|execute|existing|exists|exit|exp|explain|external|extract|false|fetch|fields|file|fillfactor|filter|final|first|float|float4|float8|floor|flush|following|for|force|foreign|fortran|forward|found|free|freetext|freetexttable|freeze|from|full|fulltext|function|fusion|g|general|generated|get|global|go|goto|grant|granted|grants|greatest|group|grouping|handler|having|header|heap|hierarchy|high_priority|hold|holdlock|host|hosts|hour|hour_microsecond|hour_minute|hour_second|identified|identity|identity_insert|identitycol|if|ignore|ilike|immediate|immutable|implementation|implicit|in|include|including|increment|index|indicator|infile|infix|inherit|inherits|initial|initialize|initially|inner|inout|input|insensitive|insert|insert_id|instance|instantiable|instead|int|int1|int2|int3|int4|int8|integer|intersect|intersection|interval|into|invoker|is|isam|isnull|isolation|iterate|join|k|key|key_member|key_type|keys|kill|lancompiler|language|large|last|last_insert_id|lateral|leading|least|leave|left|length|less|level|like|limit|lineno|lines|listen|ln|load|local|localtime|localtimestamp|location|locator|lock|login|logs|long|longblob|longtext|loop|low_priority|lower|m|map|match|matched|max|max_rows|maxextents|maxvalue|mediumblob|mediumint|mediumtext|member|merge|message_length|message_octet_length|message_text|method|middleint|min|min_rows|minus|minute|minute_microsecond|minute_second|minvalue|mlslabel|mod|mode|modifies|modify|module|month|monthname|more|move|multiset|mumps|myisam|name|names|national|natural|nchar|nclob|nesting|new|next|no|no_write_to_binlog|noaudit|nocheck|nocompress|nocreatedb|nocreaterole|nocreateuser|noinherit|nologin|nonclustered|none|normalize|normalized|nosuperuser|not|nothing|notify|notnull|nowait|null|nullable|nullif|nulls|number|numeric|object|octet_length|octets|of|off|offline|offset|offsets|oids|old|on|online|only|open|opendatasource|openquery|openrowset|openxml|operation|operator|optimize|option|optionally|options|or|order|ordering|ordinality|others|out|outer|outfile|output|over|overlaps|overlay|overriding|owner|pack_keys|pad|parameter|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|parameters|partial|partition|pascal|password|path|pctfree|percent|percent_rank|percentile_cont|percentile_disc|placing|plan|pli|position|postfix|power|preceding|precision|prefix|preorder|prepare|prepared|preserve|primary|print|prior|privileges|proc|procedural|procedure|process|processlist|public|purge|quote|raid0|raiserror|range|rank|raw|read|reads|readtext|real|recheck|reconfigure|recursive|ref|references|referencing|regexp|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|reindex|relative|release|reload|rename|repeat|repeatable|replace|replication|require|reset|resignal|resource|restart|restore|restrict|result|return|returned_cardinality|returned_length|returned_octet_length|returned_sqlstate|returns|revoke|right|rlike|role|rollback|rollup|routine|routine_catalog|routine_name|routine_schema|row|row_count|row_number|rowcount|rowguidcol|rowid|rownum|rows|rule|save|savepoint|scale|schema|schema_name|schemas|scope|scope_catalog|scope_name|scope_schema|scroll|search|second|second_microsecond|section|security|select|self|sensitive|separator|sequence|serializable|server_name|session|session_user|set|setof|sets|setuser|share|show|shutdown|signal|similar|simple|size|smallint|some|soname|source|space|spatial|specific|specific_name|specifictype|sql|sql_big_result|sql_big_selects|sql_big_tables|sql_calc_found_rows|sql_log_off|sql_log_update|sql_low_priority_updates|sql_select_limit|sql_small_result|sql_warnings|sqlca|sqlcode|sqlerror|sqlexception|sqlstate|sqlwarning|sqrt|ssl|stable|start|starting|state|statement|static|statistics|status|stddev_pop|stddev_samp|stdin|stdout|storage|straight_join|strict|string|structure|style|subclass_origin|sublist|submultiset|substring|successful|sum|superuser|symmetric|synonym|sysdate|sysid|system|system_user|table|table_name|tables|tablesample|tablespace|temp|template|temporary|terminate|terminated|text|textsize|than|then|ties|time|timestamp|timezone_hour|timezone_minute|tinyblob|tinyint|tinytext|to|toast|top|top_level_count|trailing|tran|transaction|transaction_active|transactions_committed|transactions_rolled_back|transform|transforms|translate|translation|treat|trigger|trigger_catalog|trigger_name|trigger_schema|trim|true|truncate|trusted|tsequal|type|uescape|uid|unbounded|uncommitted|under|undo|unencrypted|union|unique|unknown|unlisten|unlock|unnamed|unnest|unsigned|until|update|updatetext|upper|usage|use|user|user_defined_type_catalog|user_defined_type_code|user_defined_type_name|user_defined_type_schema|using|utc_date|utc_time|utc_timestamp|vacuum|valid|validate|validator|value|values|var_pop|var_samp|varbinary|varchar|varchar2|varcharacter|variable|variables|varying|verbose|view|volatile|waitfor|when|whenever|where|while|width_bucket|window|with|within|without|work|write|writetext|x509|xor|year|year_month|zerofill|zone)\b/i, sql) end def numerize_patterns(sql, patterns) do From 5722c9e4e180fd5b01a1177a1a0235d82da25131 Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Mon, 13 Mar 2017 19:48:41 +0530 Subject: [PATCH 04/10] fix aliasing, reserved keywords (#1) --- lib/sql_dust.ex | 1 - lib/sql_dust/utils/join_utils.ex | 1 - lib/sql_dust/utils/path_utils.ex | 4 ++-- lib/sql_dust/utils/scan_utils.ex | 12 ++++++------ 4 files changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/sql_dust.ex b/lib/sql_dust.ex index 6563df4..f042ae3 100644 --- a/lib/sql_dust.ex +++ b/lib/sql_dust.ex @@ -42,7 +42,6 @@ defmodule SqlDust do defp derive_select(options) do list = split_arguments(options[:select]) - {select, options} = list |> prepend_path_aliases(options) diff --git a/lib/sql_dust/utils/join_utils.ex b/lib/sql_dust/utils/join_utils.ex index e9d93a1..89f5aea 100644 --- a/lib/sql_dust/utils/join_utils.ex +++ b/lib/sql_dust/utils/join_utils.ex @@ -104,7 +104,6 @@ defmodule SqlDust.JoinUtils do |> Enum.map(fn(join) -> {left_key, _} = prepend_path_alias(join.left_key, options) {right_key, _} = prepend_path_alias(join.right_key, options) - additional_conditions = join[:join_on] |> List.wrap |> Enum.concat(additional_join_conditions(join.path, options)) diff --git a/lib/sql_dust/utils/path_utils.ex b/lib/sql_dust/utils/path_utils.ex index 06e8af7..1c7d6d2 100644 --- a/lib/sql_dust/utils/path_utils.ex +++ b/lib/sql_dust/utils/path_utils.ex @@ -37,7 +37,6 @@ defmodule SqlDust.PathUtils do |> Enum.concat(Enum.map(aliases, fn(sql_alias) -> [~r/([^\.\w])#{sql_alias}([^\.\w])/, quote_alias(sql_alias, options)] end)) - options = Map.put(options, :aliases, aliases) sql = numerize_patterns(sql, excluded) @@ -59,10 +58,11 @@ defmodule SqlDust.PathUtils do |> Enum.concat(scan_quoted(sql)) |> Enum.concat(scan_variables(sql)) |> Enum.concat(scan_functions(sql)) - |> Enum.concat(aliases = scan_aliases(sql) |> List.flatten |> Enum.uniq) |> Enum.concat(scan_reserved_words(sql)) + |> Enum.concat(aliases = scan_aliases(sql) |> List.flatten |> Enum.uniq) |> List.flatten |> Enum.uniq + |> IO.inspect {excluded, aliases} end diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index 1eb391f..a3fa5fe 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -10,17 +10,14 @@ defmodule SqlDust.ScanUtils do def split_arguments(sql) do excluded = scan_quoted(sql) - {sql, excluded} = numerize_patterns(sql, excluded) |> numerize_parenthesized(excluded) - {list, _} = sql |> String.split(~r/\s*,\s*/) |> Enum.reduce({[], excluded}, fn(sql, {list, excluded}) -> sql = interpolate_parenthesized(sql, excluded) {List.insert_at(list, -1, sql), excluded} end) - list end @@ -33,7 +30,6 @@ defmodule SqlDust.ScanUtils do patterns = patterns |> Enum.concat(parenthesized) |> List.flatten - |> Enum.uniq numerize_patterns(sql, patterns) |> numerize_parenthesized(patterns) end @@ -59,6 +55,10 @@ defmodule SqlDust.ScanUtils do end) end + def scan_existing_alias(sql) do + Regex.scan(~r/ AS \".+\"/i, sql) + end + def scan_variables(sql) do Regex.scan(~r/<<[\w\.]+>>/, sql) end @@ -72,11 +72,11 @@ defmodule SqlDust.ScanUtils do end def scan_aliases(sql) do - Regex.scan(~r/ AS .+$/i, sql) + Regex.scan(~r/ AS .+?(?=\)|$)/i, sql) end def scan_reserved_words(sql) do - Regex.scan(~r/\b(a|abort|abs|absolute|access|action|ada|add|admin|after|aggregate|alias|all|allocate|also|alter|always|analyse|analyze|and|any|are|array|as|asc|asensitive|assertion|assignment|asymmetric|at|atomic|attribute|attributes|audit|authorization|auto_increment|avg|avg_row_length|backup|backward|before|begin|bernoulli|between|bigint|binary|bit|bit_length|bitvar|blob|bool|boolean|both|breadth|break|browse|bulk|by|c|cache|call|called|cardinality|cascade|cascaded|case|cast|catalog|catalog_name|ceil|ceiling|chain|change|char|char_length|character|character_length|character_set_catalog|character_set_name|character_set_schema|characteristics|characters|check|checked|checkpoint|checksum|class|class_origin|clob|close|cluster|clustered|coalesce|cobol|collate|collation|collation_catalog|collation_name|collation_schema|collect|column|column_name|columns|command_function|command_function_code|comment|commit|committed|completion|compress|compute|condition|condition_number|connect|connection|connection_name|constraint|constraint_catalog|constraint_name|constraint_schema|constraints|constructor|contains|containstable|continue|conversion|convert|copy|corr|corresponding|count|covar_pop|covar_samp|create|createdb|createrole|createuser|cross|csv|cube|cume_dist|current|current_date|current_default_transform_group|current_path|current_role|current_time|current_timestamp|current_transform_group_for_type|current_user|cursor|cursor_name|cycle|data|database|databases|date|datetime|datetime_interval_code|datetime_interval_precision|day|day_hour|day_microsecond|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dbcc|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|defined|definer|degree|delay_key_write|delayed|delete|delimiter|delimiters|dense_rank|deny|depth|deref|derived|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disable|disconnect|disk|dispatch|distinct|distinctrow|distributed|div|do|domain|double|drop|dual|dummy|dump|dynamic|dynamic_function|dynamic_function_code|each|element|else|elseif|enable|enclosed|encoding|encrypted|end|end-exec|enum|equals|errlvl|escape|escaped|every|except|exception|exclude|excluding|exclusive|exec|execute|existing|exists|exit|exp|explain|external|extract|false|fetch|fields|file|fillfactor|filter|final|first|float|float4|float8|floor|flush|following|for|force|foreign|fortran|forward|found|free|freetext|freetexttable|freeze|from|full|fulltext|function|fusion|g|general|generated|get|global|go|goto|grant|granted|grants|greatest|group|grouping|handler|having|header|heap|hierarchy|high_priority|hold|holdlock|host|hosts|hour|hour_microsecond|hour_minute|hour_second|identified|identity|identity_insert|identitycol|if|ignore|ilike|immediate|immutable|implementation|implicit|in|include|including|increment|index|indicator|infile|infix|inherit|inherits|initial|initialize|initially|inner|inout|input|insensitive|insert|insert_id|instance|instantiable|instead|int|int1|int2|int3|int4|int8|integer|intersect|intersection|interval|into|invoker|is|isam|isnull|isolation|iterate|join|k|key|key_member|key_type|keys|kill|lancompiler|language|large|last|last_insert_id|lateral|leading|least|leave|left|length|less|level|like|limit|lineno|lines|listen|ln|load|local|localtime|localtimestamp|location|locator|lock|login|logs|long|longblob|longtext|loop|low_priority|lower|m|map|match|matched|max|max_rows|maxextents|maxvalue|mediumblob|mediumint|mediumtext|member|merge|message_length|message_octet_length|message_text|method|middleint|min|min_rows|minus|minute|minute_microsecond|minute_second|minvalue|mlslabel|mod|mode|modifies|modify|module|month|monthname|more|move|multiset|mumps|myisam|name|names|national|natural|nchar|nclob|nesting|new|next|no|no_write_to_binlog|noaudit|nocheck|nocompress|nocreatedb|nocreaterole|nocreateuser|noinherit|nologin|nonclustered|none|normalize|normalized|nosuperuser|not|nothing|notify|notnull|nowait|null|nullable|nullif|nulls|number|numeric|object|octet_length|octets|of|off|offline|offset|offsets|oids|old|on|online|only|open|opendatasource|openquery|openrowset|openxml|operation|operator|optimize|option|optionally|options|or|order|ordering|ordinality|others|out|outer|outfile|output|over|overlaps|overlay|overriding|owner|pack_keys|pad|parameter|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|parameters|partial|partition|pascal|password|path|pctfree|percent|percent_rank|percentile_cont|percentile_disc|placing|plan|pli|position|postfix|power|preceding|precision|prefix|preorder|prepare|prepared|preserve|primary|print|prior|privileges|proc|procedural|procedure|process|processlist|public|purge|quote|raid0|raiserror|range|rank|raw|read|reads|readtext|real|recheck|reconfigure|recursive|ref|references|referencing|regexp|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|reindex|relative|release|reload|rename|repeat|repeatable|replace|replication|require|reset|resignal|resource|restart|restore|restrict|result|return|returned_cardinality|returned_length|returned_octet_length|returned_sqlstate|returns|revoke|right|rlike|role|rollback|rollup|routine|routine_catalog|routine_name|routine_schema|row|row_count|row_number|rowcount|rowguidcol|rowid|rownum|rows|rule|save|savepoint|scale|schema|schema_name|schemas|scope|scope_catalog|scope_name|scope_schema|scroll|search|second|second_microsecond|section|security|select|self|sensitive|separator|sequence|serializable|server_name|session|session_user|set|setof|sets|setuser|share|show|shutdown|signal|similar|simple|size|smallint|some|soname|source|space|spatial|specific|specific_name|specifictype|sql|sql_big_result|sql_big_selects|sql_big_tables|sql_calc_found_rows|sql_log_off|sql_log_update|sql_low_priority_updates|sql_select_limit|sql_small_result|sql_warnings|sqlca|sqlcode|sqlerror|sqlexception|sqlstate|sqlwarning|sqrt|ssl|stable|start|starting|state|statement|static|statistics|status|stddev_pop|stddev_samp|stdin|stdout|storage|straight_join|strict|string|structure|style|subclass_origin|sublist|submultiset|substring|successful|sum|superuser|symmetric|synonym|sysdate|sysid|system|system_user|table|table_name|tables|tablesample|tablespace|temp|template|temporary|terminate|terminated|text|textsize|than|then|ties|time|timestamp|timezone_hour|timezone_minute|tinyblob|tinyint|tinytext|to|toast|top|top_level_count|trailing|tran|transaction|transaction_active|transactions_committed|transactions_rolled_back|transform|transforms|translate|translation|treat|trigger|trigger_catalog|trigger_name|trigger_schema|trim|true|truncate|trusted|tsequal|type|uescape|uid|unbounded|uncommitted|under|undo|unencrypted|union|unique|unknown|unlisten|unlock|unnamed|unnest|unsigned|until|update|updatetext|upper|usage|use|user|user_defined_type_catalog|user_defined_type_code|user_defined_type_name|user_defined_type_schema|using|utc_date|utc_time|utc_timestamp|vacuum|valid|validate|validator|value|values|var_pop|var_samp|varbinary|varchar|varchar2|varcharacter|variable|variables|varying|verbose|view|volatile|waitfor|when|whenever|where|while|width_bucket|window|with|within|without|work|write|writetext|x509|xor|year|year_month|zerofill|zone)\b/i, sql) + Regex.scan(~r/\b(a|abort|abs|absolute|access|action|ada|add|admin|after|aggregate|alias|all|allocate|also|alter|always|analyse|analyze|and|any|are|array|as|asc|asensitive|assertion|assignment|asymmetric|at|atomic|attribute|attributes|audit|authorization|auto_increment|avg|avg_row_length|backup|backward|before|begin|bernoulli|between|bigint|binary|bit|bit_length|bitvar|blob|bool|boolean|both|breadth|break|browse|bulk|by|c|cache|call|called|cardinality|cascade|cascaded|case|cast|catalog|catalog_name|ceil|ceiling|chain|change|char|char_length|character|character_length|character_set_catalog|character_set_name|character_set_schema|characteristics|characters|check|checked|checkpoint|checksum|class|class_origin|clob|close|cluster|clustered|coalesce|cobol|collate|collation|collation_catalog|collation_name|collation_schema|collect|column|column_name|columns|command_function|command_function_code|comment|commit|committed|completion|compress|compute|condition|condition_number|connect|connection|connection_name|constraint|constraint_catalog|constraint_name|constraint_schema|constraints|constructor|contains|containstable|continue|conversion|convert|copy|corr|corresponding|count|covar_pop|covar_samp|create|createdb|createrole|createuser|cross|csv|cube|cume_dist|current|current_date|current_default_transform_group|current_path|current_role|current_time|current_timestamp|current_transform_group_for_type|current_user|cursor|cursor_name|cycle|data|database|databases|date|datetime|datetime_interval_code|datetime_interval_precision|day|day_hour|day_microsecond|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dbcc|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|defined|definer|degree|delay_key_write|delayed|delete|delimiter|delimiters|dense_rank|deny|depth|deref|derived|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disable|disconnect|disk|dispatch|distinct|distinctrow|distributed|div|do|dow|domain|double|drop|dual|dummy|dump|dynamic|dynamic_function|dynamic_function_code|each|element|else|elseif|enable|enclosed|encoding|encrypted|end|end-exec|enum|equals|errlvl|escape|escaped|every|except|exception|exclude|excluding|exclusive|exec|execute|existing|exists|exit|exp|explain|external|extract|false|fetch|fields|file|fillfactor|filter|final|first|float|float4|float8|floor|flush|following|for|force|foreign|fortran|forward|found|free|freetext|freetexttable|freeze|from|full|fulltext|function|fusion|g|general|generated|get|global|go|goto|grant|granted|grants|greatest|group|grouping|handler|having|header|heap|hierarchy|high_priority|hold|holdlock|host|hosts|hour|hour_microsecond|hour_minute|hour_second|identified|identity|identity_insert|identitycol|if|ignore|ilike|immediate|immutable|implementation|implicit|in|include|including|increment|index|indicator|infile|infix|inherit|inherits|initial|initialize|initially|inner|inout|input|insensitive|insert|insert_id|instance|instantiable|instead|int|int1|int2|int3|int4|int8|integer|intersect|intersection|interval|into|invoker|is|isam|isnull|isolation|iterate|join|k|key|key_member|key_type|keys|kill|lancompiler|language|large|last|last_insert_id|lateral|leading|least|leave|left|length|less|level|like|limit|lineno|lines|listen|ln|load|local|localtime|localtimestamp|location|locator|lock|login|logs|long|longblob|longtext|loop|low_priority|lower|m|map|match|matched|max|max_rows|maxextents|maxvalue|mediumblob|mediumint|mediumtext|member|merge|message_length|message_octet_length|message_text|method|middleint|min|min_rows|minus|minute|minute_microsecond|minute_second|minvalue|mlslabel|mod|mode|modifies|modify|module|month|monthname|more|move|multiset|mumps|myisam|name|names|national|natural|nchar|nclob|nesting|new|next|no|no_write_to_binlog|noaudit|nocheck|nocompress|nocreatedb|nocreaterole|nocreateuser|noinherit|nologin|nonclustered|none|normalize|normalized|nosuperuser|not|nothing|notify|notnull|nowait|null|nullable|nullif|nulls|number|numeric|object|octet_length|octets|of|off|offline|offset|offsets|oids|old|on|online|only|open|opendatasource|openquery|openrowset|openxml|operation|operator|optimize|option|optionally|options|or|order|ordering|ordinality|others|out|outer|outfile|output|over|overlaps|overlay|overriding|owner|pack_keys|pad|parameter|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|parameters|partial|partition|pascal|password|path|pctfree|percent|percent_rank|percentile_cont|percentile_disc|placing|plan|pli|position|postfix|power|preceding|precision|prefix|preorder|prepare|prepared|preserve|primary|print|prior|privileges|proc|procedural|procedure|process|processlist|public|purge|quarter|quote|raid0|raiserror|range|rank|raw|read|reads|readtext|real|recheck|reconfigure|recursive|ref|references|referencing|regexp|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|reindex|relative|release|reload|rename|repeat|repeatable|replace|replication|require|reset|resignal|resource|restart|restore|restrict|result|return|returned_cardinality|returned_length|returned_octet_length|returned_sqlstate|returns|revoke|right|rlike|role|rollback|rollup|routine|routine_catalog|routine_name|routine_schema|row|row_count|row_number|rowcount|rowguidcol|rowid|rownum|rows|rule|save|savepoint|scale|schema|schema_name|schemas|scope|scope_catalog|scope_name|scope_schema|scroll|search|second|second_microsecond|section|security|select|self|sensitive|separator|sequence|serializable|server_name|session|session_user|set|setof|sets|setuser|share|show|shutdown|signal|similar|simple|size|smallint|some|soname|source|space|spatial|specific|specific_name|specifictype|sql|sql_big_result|sql_big_selects|sql_big_tables|sql_calc_found_rows|sql_log_off|sql_log_update|sql_low_priority_updates|sql_select_limit|sql_small_result|sql_warnings|sqlca|sqlcode|sqlerror|sqlexception|sqlstate|sqlwarning|sqrt|ssl|stable|start|starting|state|statement|static|statistics|status|stddev_pop|stddev_samp|stdin|stdout|storage|straight_join|strict|string|structure|style|subclass_origin|sublist|submultiset|substring|successful|sum|superuser|symmetric|synonym|sysdate|sysid|system|system_user|table|table_name|tables|tablesample|tablespace|temp|template|temporary|terminate|terminated|text|textsize|than|then|ties|time|timestamp|timezone_hour|timezone_minute|tinyblob|tinyint|tinytext|to|toast|top|top_level_count|trailing|tran|transaction|transaction_active|transactions_committed|transactions_rolled_back|transform|transforms|translate|translation|treat|trigger|trigger_catalog|trigger_name|trigger_schema|trim|true|truncate|trusted|tsequal|type|uescape|uid|unbounded|uncommitted|under|undo|unencrypted|union|unique|unknown|unlisten|unlock|unnamed|unnest|unsigned|until|update|updatetext|upper|usage|use|user|user_defined_type_catalog|user_defined_type_code|user_defined_type_name|user_defined_type_schema|using|utc_date|utc_time|utc_timestamp|vacuum|valid|validate|validator|value|values|var_pop|var_samp|varbinary|varchar|varchar2|varcharacter|variable|variables|varying|verbose|view|volatile|waitfor|week|when|whenever|where|while|width_bucket|window|with|within|without|work|write|writetext|x509|xor|year|year_month|zerofill|zone)\b/i, sql) end def numerize_patterns(sql, patterns) do From 3413560f7b5f1268773c7c105923bacb037a1bb9 Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Mon, 13 Mar 2017 19:54:11 +0530 Subject: [PATCH 05/10] remove IO.inspect --- lib/sql_dust/utils/path_utils.ex | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/lib/sql_dust/utils/path_utils.ex b/lib/sql_dust/utils/path_utils.ex index 1c7d6d2..d725a59 100644 --- a/lib/sql_dust/utils/path_utils.ex +++ b/lib/sql_dust/utils/path_utils.ex @@ -62,8 +62,7 @@ defmodule SqlDust.PathUtils do |> Enum.concat(aliases = scan_aliases(sql) |> List.flatten |> Enum.uniq) |> List.flatten |> Enum.uniq - |> IO.inspect - + {excluded, aliases} end From d5b777f4448c59d4c7de0742c5233a79c696f538 Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Mon, 13 Mar 2017 21:27:33 +0530 Subject: [PATCH 06/10] Update path_utils.ex --- lib/sql_dust/utils/path_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/path_utils.ex b/lib/sql_dust/utils/path_utils.ex index d725a59..263e3b3 100644 --- a/lib/sql_dust/utils/path_utils.ex +++ b/lib/sql_dust/utils/path_utils.ex @@ -58,8 +58,8 @@ defmodule SqlDust.PathUtils do |> Enum.concat(scan_quoted(sql)) |> Enum.concat(scan_variables(sql)) |> Enum.concat(scan_functions(sql)) - |> Enum.concat(scan_reserved_words(sql)) |> Enum.concat(aliases = scan_aliases(sql) |> List.flatten |> Enum.uniq) + |> Enum.concat(scan_reserved_words(sql)) |> List.flatten |> Enum.uniq From d813f9fab69c270a70993dfaf59108a40be5598a Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Mon, 13 Mar 2017 23:50:27 +0530 Subject: [PATCH 07/10] Update scan_utils.ex --- lib/sql_dust/utils/scan_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index a3fa5fe..83cd0b5 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -76,7 +76,7 @@ defmodule SqlDust.ScanUtils do end def scan_reserved_words(sql) do - Regex.scan(~r/\b(a|abort|abs|absolute|access|action|ada|add|admin|after|aggregate|alias|all|allocate|also|alter|always|analyse|analyze|and|any|are|array|as|asc|asensitive|assertion|assignment|asymmetric|at|atomic|attribute|attributes|audit|authorization|auto_increment|avg|avg_row_length|backup|backward|before|begin|bernoulli|between|bigint|binary|bit|bit_length|bitvar|blob|bool|boolean|both|breadth|break|browse|bulk|by|c|cache|call|called|cardinality|cascade|cascaded|case|cast|catalog|catalog_name|ceil|ceiling|chain|change|char|char_length|character|character_length|character_set_catalog|character_set_name|character_set_schema|characteristics|characters|check|checked|checkpoint|checksum|class|class_origin|clob|close|cluster|clustered|coalesce|cobol|collate|collation|collation_catalog|collation_name|collation_schema|collect|column|column_name|columns|command_function|command_function_code|comment|commit|committed|completion|compress|compute|condition|condition_number|connect|connection|connection_name|constraint|constraint_catalog|constraint_name|constraint_schema|constraints|constructor|contains|containstable|continue|conversion|convert|copy|corr|corresponding|count|covar_pop|covar_samp|create|createdb|createrole|createuser|cross|csv|cube|cume_dist|current|current_date|current_default_transform_group|current_path|current_role|current_time|current_timestamp|current_transform_group_for_type|current_user|cursor|cursor_name|cycle|data|database|databases|date|datetime|datetime_interval_code|datetime_interval_precision|day|day_hour|day_microsecond|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dbcc|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|defined|definer|degree|delay_key_write|delayed|delete|delimiter|delimiters|dense_rank|deny|depth|deref|derived|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disable|disconnect|disk|dispatch|distinct|distinctrow|distributed|div|do|dow|domain|double|drop|dual|dummy|dump|dynamic|dynamic_function|dynamic_function_code|each|element|else|elseif|enable|enclosed|encoding|encrypted|end|end-exec|enum|equals|errlvl|escape|escaped|every|except|exception|exclude|excluding|exclusive|exec|execute|existing|exists|exit|exp|explain|external|extract|false|fetch|fields|file|fillfactor|filter|final|first|float|float4|float8|floor|flush|following|for|force|foreign|fortran|forward|found|free|freetext|freetexttable|freeze|from|full|fulltext|function|fusion|g|general|generated|get|global|go|goto|grant|granted|grants|greatest|group|grouping|handler|having|header|heap|hierarchy|high_priority|hold|holdlock|host|hosts|hour|hour_microsecond|hour_minute|hour_second|identified|identity|identity_insert|identitycol|if|ignore|ilike|immediate|immutable|implementation|implicit|in|include|including|increment|index|indicator|infile|infix|inherit|inherits|initial|initialize|initially|inner|inout|input|insensitive|insert|insert_id|instance|instantiable|instead|int|int1|int2|int3|int4|int8|integer|intersect|intersection|interval|into|invoker|is|isam|isnull|isolation|iterate|join|k|key|key_member|key_type|keys|kill|lancompiler|language|large|last|last_insert_id|lateral|leading|least|leave|left|length|less|level|like|limit|lineno|lines|listen|ln|load|local|localtime|localtimestamp|location|locator|lock|login|logs|long|longblob|longtext|loop|low_priority|lower|m|map|match|matched|max|max_rows|maxextents|maxvalue|mediumblob|mediumint|mediumtext|member|merge|message_length|message_octet_length|message_text|method|middleint|min|min_rows|minus|minute|minute_microsecond|minute_second|minvalue|mlslabel|mod|mode|modifies|modify|module|month|monthname|more|move|multiset|mumps|myisam|name|names|national|natural|nchar|nclob|nesting|new|next|no|no_write_to_binlog|noaudit|nocheck|nocompress|nocreatedb|nocreaterole|nocreateuser|noinherit|nologin|nonclustered|none|normalize|normalized|nosuperuser|not|nothing|notify|notnull|nowait|null|nullable|nullif|nulls|number|numeric|object|octet_length|octets|of|off|offline|offset|offsets|oids|old|on|online|only|open|opendatasource|openquery|openrowset|openxml|operation|operator|optimize|option|optionally|options|or|order|ordering|ordinality|others|out|outer|outfile|output|over|overlaps|overlay|overriding|owner|pack_keys|pad|parameter|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|parameters|partial|partition|pascal|password|path|pctfree|percent|percent_rank|percentile_cont|percentile_disc|placing|plan|pli|position|postfix|power|preceding|precision|prefix|preorder|prepare|prepared|preserve|primary|print|prior|privileges|proc|procedural|procedure|process|processlist|public|purge|quarter|quote|raid0|raiserror|range|rank|raw|read|reads|readtext|real|recheck|reconfigure|recursive|ref|references|referencing|regexp|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|reindex|relative|release|reload|rename|repeat|repeatable|replace|replication|require|reset|resignal|resource|restart|restore|restrict|result|return|returned_cardinality|returned_length|returned_octet_length|returned_sqlstate|returns|revoke|right|rlike|role|rollback|rollup|routine|routine_catalog|routine_name|routine_schema|row|row_count|row_number|rowcount|rowguidcol|rowid|rownum|rows|rule|save|savepoint|scale|schema|schema_name|schemas|scope|scope_catalog|scope_name|scope_schema|scroll|search|second|second_microsecond|section|security|select|self|sensitive|separator|sequence|serializable|server_name|session|session_user|set|setof|sets|setuser|share|show|shutdown|signal|similar|simple|size|smallint|some|soname|source|space|spatial|specific|specific_name|specifictype|sql|sql_big_result|sql_big_selects|sql_big_tables|sql_calc_found_rows|sql_log_off|sql_log_update|sql_low_priority_updates|sql_select_limit|sql_small_result|sql_warnings|sqlca|sqlcode|sqlerror|sqlexception|sqlstate|sqlwarning|sqrt|ssl|stable|start|starting|state|statement|static|statistics|status|stddev_pop|stddev_samp|stdin|stdout|storage|straight_join|strict|string|structure|style|subclass_origin|sublist|submultiset|substring|successful|sum|superuser|symmetric|synonym|sysdate|sysid|system|system_user|table|table_name|tables|tablesample|tablespace|temp|template|temporary|terminate|terminated|text|textsize|than|then|ties|time|timestamp|timezone_hour|timezone_minute|tinyblob|tinyint|tinytext|to|toast|top|top_level_count|trailing|tran|transaction|transaction_active|transactions_committed|transactions_rolled_back|transform|transforms|translate|translation|treat|trigger|trigger_catalog|trigger_name|trigger_schema|trim|true|truncate|trusted|tsequal|type|uescape|uid|unbounded|uncommitted|under|undo|unencrypted|union|unique|unknown|unlisten|unlock|unnamed|unnest|unsigned|until|update|updatetext|upper|usage|use|user|user_defined_type_catalog|user_defined_type_code|user_defined_type_name|user_defined_type_schema|using|utc_date|utc_time|utc_timestamp|vacuum|valid|validate|validator|value|values|var_pop|var_samp|varbinary|varchar|varchar2|varcharacter|variable|variables|varying|verbose|view|volatile|waitfor|week|when|whenever|where|while|width_bucket|window|with|within|without|work|write|writetext|x509|xor|year|year_month|zerofill|zone)\b/i, sql) + Regex.scan(~r/\b(?=\.)(a|abort|abs|absolute|access|action|ada|add|admin|after|aggregate|alias|all|allocate|also|alter|always|analyse|analyze|and|any|are|array|as|asc|asensitive|assertion|assignment|asymmetric|at|atomic|attribute|attributes|audit|authorization|auto_increment|avg|avg_row_length|backup|backward|before|begin|bernoulli|between|bigint|binary|bit|bit_length|bitvar|blob|bool|boolean|both|breadth|break|browse|bulk|by|c|cache|call|called|cardinality|cascade|cascaded|case|cast|catalog|catalog_name|ceil|ceiling|chain|change|char|char_length|character|character_length|character_set_catalog|character_set_name|character_set_schema|characteristics|characters|check|checked|checkpoint|checksum|class|class_origin|clob|close|cluster|clustered|coalesce|cobol|collate|collation|collation_catalog|collation_name|collation_schema|collect|column|column_name|columns|command_function|command_function_code|comment|commit|committed|completion|compress|compute|condition|condition_number|connect|connection|connection_name|constraint|constraint_catalog|constraint_name|constraint_schema|constraints|constructor|contains|containstable|continue|conversion|convert|copy|corr|corresponding|count|covar_pop|covar_samp|create|createdb|createrole|createuser|cross|csv|cube|cume_dist|current|current_date|current_default_transform_group|current_path|current_role|current_time|current_timestamp|current_transform_group_for_type|current_user|cursor|cursor_name|cycle|data|database|databases|date|datetime|datetime_interval_code|datetime_interval_precision|day|day_hour|day_microsecond|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dbcc|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|defined|definer|degree|delay_key_write|delayed|delete|delimiter|delimiters|dense_rank|deny|depth|deref|derived|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disable|disconnect|disk|dispatch|distinct|distinctrow|distributed|div|do|dow|domain|double|drop|dual|dummy|dump|dynamic|dynamic_function|dynamic_function_code|each|element|else|elseif|enable|enclosed|encoding|encrypted|end|end-exec|enum|equals|errlvl|escape|escaped|every|except|exception|exclude|excluding|exclusive|exec|execute|existing|exists|exit|exp|explain|external|extract|false|fetch|fields|file|fillfactor|filter|final|first|float|float4|float8|floor|flush|following|for|force|foreign|fortran|forward|found|free|freetext|freetexttable|freeze|from|full|fulltext|function|fusion|g|general|generated|get|global|go|goto|grant|granted|grants|greatest|group|grouping|handler|having|header|heap|hierarchy|high_priority|hold|holdlock|host|hosts|hour|hour_microsecond|hour_minute|hour_second|identified|identity|identity_insert|identitycol|if|ignore|ilike|immediate|immutable|implementation|implicit|in|include|including|increment|index|indicator|infile|infix|inherit|inherits|initial|initialize|initially|inner|inout|input|insensitive|insert|insert_id|instance|instantiable|instead|int|int1|int2|int3|int4|int8|integer|intersect|intersection|interval|into|invoker|is|isam|isnull|isolation|iterate|join|k|key|key_member|key_type|keys|kill|lancompiler|language|large|last|last_insert_id|lateral|leading|least|leave|left|length|less|level|like|limit|lineno|lines|listen|ln|load|local|localtime|localtimestamp|location|locator|lock|login|logs|long|longblob|longtext|loop|low_priority|lower|m|map|match|matched|max|max_rows|maxextents|maxvalue|mediumblob|mediumint|mediumtext|member|merge|message_length|message_octet_length|message_text|method|middleint|min|min_rows|minus|minute|minute_microsecond|minute_second|minvalue|mlslabel|mod|mode|modifies|modify|module|month|monthname|more|move|multiset|mumps|myisam|name|names|national|natural|nchar|nclob|nesting|new|next|no|no_write_to_binlog|noaudit|nocheck|nocompress|nocreatedb|nocreaterole|nocreateuser|noinherit|nologin|nonclustered|none|normalize|normalized|nosuperuser|not|nothing|notify|notnull|nowait|null|nullable|nullif|nulls|number|numeric|object|octet_length|octets|of|off|offline|offset|offsets|oids|old|on|online|only|open|opendatasource|openquery|openrowset|openxml|operation|operator|optimize|option|optionally|options|or|order|ordering|ordinality|others|out|outer|outfile|output|over|overlaps|overlay|overriding|owner|pack_keys|pad|parameter|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|parameters|partial|partition|pascal|password|path|pctfree|percent|percent_rank|percentile_cont|percentile_disc|placing|plan|pli|position|postfix|power|preceding|precision|prefix|preorder|prepare|prepared|preserve|primary|print|prior|privileges|proc|procedural|procedure|process|processlist|public|purge|quarter|quote|raid0|raiserror|range|rank|raw|read|reads|readtext|real|recheck|reconfigure|recursive|ref|references|referencing|regexp|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|reindex|relative|release|reload|rename|repeat|repeatable|replace|replication|require|reset|resignal|resource|restart|restore|restrict|result|return|returned_cardinality|returned_length|returned_octet_length|returned_sqlstate|returns|revoke|right|rlike|role|rollback|rollup|routine|routine_catalog|routine_name|routine_schema|row|row_count|row_number|rowcount|rowguidcol|rowid|rownum|rows|rule|save|savepoint|scale|schema|schema_name|schemas|scope|scope_catalog|scope_name|scope_schema|scroll|search|second|second_microsecond|section|security|select|self|sensitive|separator|sequence|serializable|server_name|session|session_user|set|setof|sets|setuser|share|show|shutdown|signal|similar|simple|size|smallint|some|soname|source|space|spatial|specific|specific_name|specifictype|sql|sql_big_result|sql_big_selects|sql_big_tables|sql_calc_found_rows|sql_log_off|sql_log_update|sql_low_priority_updates|sql_select_limit|sql_small_result|sql_warnings|sqlca|sqlcode|sqlerror|sqlexception|sqlstate|sqlwarning|sqrt|ssl|stable|start|starting|state|statement|static|statistics|status|stddev_pop|stddev_samp|stdin|stdout|storage|straight_join|strict|string|structure|style|subclass_origin|sublist|submultiset|substring|successful|sum|superuser|symmetric|synonym|sysdate|sysid|system|system_user|table|table_name|tables|tablesample|tablespace|temp|template|temporary|terminate|terminated|text|textsize|than|then|ties|time|timestamp|timezone_hour|timezone_minute|tinyblob|tinyint|tinytext|to|toast|top|top_level_count|trailing|tran|transaction|transaction_active|transactions_committed|transactions_rolled_back|transform|transforms|translate|translation|treat|trigger|trigger_catalog|trigger_name|trigger_schema|trim|true|truncate|trusted|tsequal|type|uescape|uid|unbounded|uncommitted|under|undo|unencrypted|union|unique|unknown|unlisten|unlock|unnamed|unnest|unsigned|until|update|updatetext|upper|usage|use|user|user_defined_type_catalog|user_defined_type_code|user_defined_type_name|user_defined_type_schema|using|utc_date|utc_time|utc_timestamp|vacuum|valid|validate|validator|value|values|var_pop|var_samp|varbinary|varchar|varchar2|varcharacter|variable|variables|varying|verbose|view|volatile|waitfor|week|when|whenever|where|while|width_bucket|window|with|within|without|work|write|writetext|x509|xor|year|year_month|zerofill|zone)\b/i, sql) end def numerize_patterns(sql, patterns) do From cea8e9e7023c41d41c0a1bff8053fb390b84e40d Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Tue, 14 Mar 2017 00:46:42 +0530 Subject: [PATCH 08/10] Update scan_utils.ex --- lib/sql_dust/utils/scan_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index 83cd0b5..81f8433 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -76,7 +76,7 @@ defmodule SqlDust.ScanUtils do end def scan_reserved_words(sql) do - Regex.scan(~r/\b(?=\.)(a|abort|abs|absolute|access|action|ada|add|admin|after|aggregate|alias|all|allocate|also|alter|always|analyse|analyze|and|any|are|array|as|asc|asensitive|assertion|assignment|asymmetric|at|atomic|attribute|attributes|audit|authorization|auto_increment|avg|avg_row_length|backup|backward|before|begin|bernoulli|between|bigint|binary|bit|bit_length|bitvar|blob|bool|boolean|both|breadth|break|browse|bulk|by|c|cache|call|called|cardinality|cascade|cascaded|case|cast|catalog|catalog_name|ceil|ceiling|chain|change|char|char_length|character|character_length|character_set_catalog|character_set_name|character_set_schema|characteristics|characters|check|checked|checkpoint|checksum|class|class_origin|clob|close|cluster|clustered|coalesce|cobol|collate|collation|collation_catalog|collation_name|collation_schema|collect|column|column_name|columns|command_function|command_function_code|comment|commit|committed|completion|compress|compute|condition|condition_number|connect|connection|connection_name|constraint|constraint_catalog|constraint_name|constraint_schema|constraints|constructor|contains|containstable|continue|conversion|convert|copy|corr|corresponding|count|covar_pop|covar_samp|create|createdb|createrole|createuser|cross|csv|cube|cume_dist|current|current_date|current_default_transform_group|current_path|current_role|current_time|current_timestamp|current_transform_group_for_type|current_user|cursor|cursor_name|cycle|data|database|databases|date|datetime|datetime_interval_code|datetime_interval_precision|day|day_hour|day_microsecond|day_minute|day_second|dayofmonth|dayofweek|dayofyear|dbcc|deallocate|dec|decimal|declare|default|defaults|deferrable|deferred|defined|definer|degree|delay_key_write|delayed|delete|delimiter|delimiters|dense_rank|deny|depth|deref|derived|desc|describe|descriptor|destroy|destructor|deterministic|diagnostics|dictionary|disable|disconnect|disk|dispatch|distinct|distinctrow|distributed|div|do|dow|domain|double|drop|dual|dummy|dump|dynamic|dynamic_function|dynamic_function_code|each|element|else|elseif|enable|enclosed|encoding|encrypted|end|end-exec|enum|equals|errlvl|escape|escaped|every|except|exception|exclude|excluding|exclusive|exec|execute|existing|exists|exit|exp|explain|external|extract|false|fetch|fields|file|fillfactor|filter|final|first|float|float4|float8|floor|flush|following|for|force|foreign|fortran|forward|found|free|freetext|freetexttable|freeze|from|full|fulltext|function|fusion|g|general|generated|get|global|go|goto|grant|granted|grants|greatest|group|grouping|handler|having|header|heap|hierarchy|high_priority|hold|holdlock|host|hosts|hour|hour_microsecond|hour_minute|hour_second|identified|identity|identity_insert|identitycol|if|ignore|ilike|immediate|immutable|implementation|implicit|in|include|including|increment|index|indicator|infile|infix|inherit|inherits|initial|initialize|initially|inner|inout|input|insensitive|insert|insert_id|instance|instantiable|instead|int|int1|int2|int3|int4|int8|integer|intersect|intersection|interval|into|invoker|is|isam|isnull|isolation|iterate|join|k|key|key_member|key_type|keys|kill|lancompiler|language|large|last|last_insert_id|lateral|leading|least|leave|left|length|less|level|like|limit|lineno|lines|listen|ln|load|local|localtime|localtimestamp|location|locator|lock|login|logs|long|longblob|longtext|loop|low_priority|lower|m|map|match|matched|max|max_rows|maxextents|maxvalue|mediumblob|mediumint|mediumtext|member|merge|message_length|message_octet_length|message_text|method|middleint|min|min_rows|minus|minute|minute_microsecond|minute_second|minvalue|mlslabel|mod|mode|modifies|modify|module|month|monthname|more|move|multiset|mumps|myisam|name|names|national|natural|nchar|nclob|nesting|new|next|no|no_write_to_binlog|noaudit|nocheck|nocompress|nocreatedb|nocreaterole|nocreateuser|noinherit|nologin|nonclustered|none|normalize|normalized|nosuperuser|not|nothing|notify|notnull|nowait|null|nullable|nullif|nulls|number|numeric|object|octet_length|octets|of|off|offline|offset|offsets|oids|old|on|online|only|open|opendatasource|openquery|openrowset|openxml|operation|operator|optimize|option|optionally|options|or|order|ordering|ordinality|others|out|outer|outfile|output|over|overlaps|overlay|overriding|owner|pack_keys|pad|parameter|parameter_mode|parameter_name|parameter_ordinal_position|parameter_specific_catalog|parameter_specific_name|parameter_specific_schema|parameters|partial|partition|pascal|password|path|pctfree|percent|percent_rank|percentile_cont|percentile_disc|placing|plan|pli|position|postfix|power|preceding|precision|prefix|preorder|prepare|prepared|preserve|primary|print|prior|privileges|proc|procedural|procedure|process|processlist|public|purge|quarter|quote|raid0|raiserror|range|rank|raw|read|reads|readtext|real|recheck|reconfigure|recursive|ref|references|referencing|regexp|regr_avgx|regr_avgy|regr_count|regr_intercept|regr_r2|regr_slope|regr_sxx|regr_sxy|regr_syy|reindex|relative|release|reload|rename|repeat|repeatable|replace|replication|require|reset|resignal|resource|restart|restore|restrict|result|return|returned_cardinality|returned_length|returned_octet_length|returned_sqlstate|returns|revoke|right|rlike|role|rollback|rollup|routine|routine_catalog|routine_name|routine_schema|row|row_count|row_number|rowcount|rowguidcol|rowid|rownum|rows|rule|save|savepoint|scale|schema|schema_name|schemas|scope|scope_catalog|scope_name|scope_schema|scroll|search|second|second_microsecond|section|security|select|self|sensitive|separator|sequence|serializable|server_name|session|session_user|set|setof|sets|setuser|share|show|shutdown|signal|similar|simple|size|smallint|some|soname|source|space|spatial|specific|specific_name|specifictype|sql|sql_big_result|sql_big_selects|sql_big_tables|sql_calc_found_rows|sql_log_off|sql_log_update|sql_low_priority_updates|sql_select_limit|sql_small_result|sql_warnings|sqlca|sqlcode|sqlerror|sqlexception|sqlstate|sqlwarning|sqrt|ssl|stable|start|starting|state|statement|static|statistics|status|stddev_pop|stddev_samp|stdin|stdout|storage|straight_join|strict|string|structure|style|subclass_origin|sublist|submultiset|substring|successful|sum|superuser|symmetric|synonym|sysdate|sysid|system|system_user|table|table_name|tables|tablesample|tablespace|temp|template|temporary|terminate|terminated|text|textsize|than|then|ties|time|timestamp|timezone_hour|timezone_minute|tinyblob|tinyint|tinytext|to|toast|top|top_level_count|trailing|tran|transaction|transaction_active|transactions_committed|transactions_rolled_back|transform|transforms|translate|translation|treat|trigger|trigger_catalog|trigger_name|trigger_schema|trim|true|truncate|trusted|tsequal|type|uescape|uid|unbounded|uncommitted|under|undo|unencrypted|union|unique|unknown|unlisten|unlock|unnamed|unnest|unsigned|until|update|updatetext|upper|usage|use|user|user_defined_type_catalog|user_defined_type_code|user_defined_type_name|user_defined_type_schema|using|utc_date|utc_time|utc_timestamp|vacuum|valid|validate|validator|value|values|var_pop|var_samp|varbinary|varchar|varchar2|varcharacter|variable|variables|varying|verbose|view|volatile|waitfor|week|when|whenever|where|while|width_bucket|window|with|within|without|work|write|writetext|x509|xor|year|year_month|zerofill|zone)\b/i, sql) + Regex.scan(~r/\b(?=\.)(\b(distinct|and|or|is|like|rlike|point|bigint|bigserial|bit|bit|varying|boolean|bytea|character|character|varying|date|double|precision|integer|numeric|real|serial|smallint|text|time|with|timezone|timestamp|with|timezone|xml|regexp|in|interval|between|not|null|sounds|soundex|asc|desc|true|false)\b)\b/i, sql) end def numerize_patterns(sql, patterns) do From 4271dd81462bc2173ea2867e8a843f964ddf9db2 Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Tue, 14 Mar 2017 00:48:30 +0530 Subject: [PATCH 09/10] Update scan_utils.ex --- lib/sql_dust/utils/scan_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index 81f8433..8c0a343 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -76,7 +76,7 @@ defmodule SqlDust.ScanUtils do end def scan_reserved_words(sql) do - Regex.scan(~r/\b(?=\.)(\b(distinct|and|or|is|like|rlike|point|bigint|bigserial|bit|bit|varying|boolean|bytea|character|character|varying|date|double|precision|integer|numeric|real|serial|smallint|text|time|with|timezone|timestamp|with|timezone|xml|regexp|in|interval|between|not|null|sounds|soundex|asc|desc|true|false)\b)\b/i, sql) + Regex.scan(~r/\b(distinct|and|or|is|like|rlike|point|bigint|bigserial|bit|bit|varying|boolean|bytea|character|character|varying|date|double|precision|integer|numeric|real|serial|smallint|text|time|with|timezone|timestamp|with|timezone|xml|regexp|in|interval|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) end def numerize_patterns(sql, patterns) do From 5583087f8fa830bf99ac9da971f700db85470553 Mon Sep 17 00:00:00 2001 From: Aditya Upadhyay Date: Tue, 14 Mar 2017 00:58:09 +0530 Subject: [PATCH 10/10] Update scan_utils.ex --- lib/sql_dust/utils/scan_utils.ex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index 8c0a343..216692c 100644 --- a/lib/sql_dust/utils/scan_utils.ex +++ b/lib/sql_dust/utils/scan_utils.ex @@ -76,7 +76,7 @@ defmodule SqlDust.ScanUtils do end def scan_reserved_words(sql) do - Regex.scan(~r/\b(distinct|and|or|is|like|rlike|point|bigint|bigserial|bit|bit|varying|boolean|bytea|character|character|varying|date|double|precision|integer|numeric|real|serial|smallint|text|time|with|timezone|timestamp|with|timezone|xml|regexp|in|interval|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) + Regex.scan(~r/\b(distinct|and|as|or|is|like|rlike|point|bigint|bigserial|bit|bit|varying|boolean|bytea|character|character|varying|date|double|precision|integer|numeric|real|serial|smallint|text|time|with|timezone|timestamp|with|timezone|xml|regexp|in|interval|between|not|null|sounds|soundex|asc|desc|true|false)\b/i, sql) end def numerize_patterns(sql, patterns) do