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..263e3b3 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) @@ -63,7 +62,7 @@ defmodule SqlDust.PathUtils do |> Enum.concat(scan_reserved_words(sql)) |> List.flatten |> Enum.uniq - + {excluded, aliases} end diff --git a/lib/sql_dust/utils/scan_utils.ex b/lib/sql_dust/utils/scan_utils.ex index e7b0e36..216692c 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(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|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