Personally, I think using straight String comparisons is the main
> problem. If you look at the code for Identifier#equals that is really
> exactly what we need already.
>
> We cannot just drop the quotes for an accurate comparison. "`MY_TABLE`"
> and "`my_table`" are different tables to each sane and SQL spec compliant
> database. But conversely "MY_TABLE" and "my_table" are the same
table.
>
That's true, so if one or both names are quoted, we can remove the quoting
chars and do a case-sensitive comparison otherwise we we can do a
case-insensitive comparison, am I right?
Correct. That is more or less what Identifier#equals does, although atm in
the interest of simplicity it simply leverages the
Identifier#getCanonicalName of the 2 Identifiers to perform the
comparison. Identifier#getCanonicalName lowercases the name if not quoted,
and then #equals compares that return.
We should really adjust this however as it can lead to false positive
hits. Consider comparing "`my_table`" and "my_table" which really
ought to
evaluate to not-equal[1]. However the canonical name in both cases is the
same ("my_table") and so would evaluate to equal.
[1] I believe this is database dependent - whether a quoted and non-quoted
identifier can ever refer to the same database/schema object.