diff options
-rw-r--r-- | src/mono_opt.sml | 2 | ||||
-rw-r--r-- | src/mysql.sml | 22 |
2 files changed, 13 insertions, 11 deletions
diff --git a/src/mono_opt.sml b/src/mono_opt.sml index dd04a838..9b9308be 100644 --- a/src/mono_opt.sml +++ b/src/mono_opt.sml @@ -100,7 +100,7 @@ fun unAs s = let fun doChars (cs, acc) = case cs of - #"T" :: #"." :: cs => doChars (cs, acc) + #"T" :: #"_" :: #"T" :: #"." :: cs => doChars (cs, acc) | #"'" :: cs => doString (cs, acc) | ch :: cs => doChars (cs, ch :: acc) | [] => String.implode (rev acc) diff --git a/src/mysql.sml b/src/mysql.sml index eba125c7..2941186c 100644 --- a/src/mysql.sml +++ b/src/mysql.sml @@ -73,19 +73,21 @@ val ident = String.translate (fn #"'" => "PRIME" fun checkRel (table, checkNullable) (s, xts) = let val sl = CharVector.map Char.toLower s + val both = "table_name IN ('" ^ sl ^ "', '" ^ s ^ "')" - val q = "SELECT COUNT(*) FROM information_schema." ^ table ^ " WHERE table_name = '" - ^ sl ^ "'" + val q = "SELECT COUNT(*) FROM information_schema." ^ table ^ " WHERE " ^ both - val q' = String.concat ["SELECT COUNT(*) FROM information_schema.columns WHERE table_name = '", - sl, - "' AND (", + val q' = String.concat ["SELECT COUNT(*) FROM information_schema.columns WHERE ", + both, + " AND (", String.concatWith " OR " (map (fn (x, t) => - String.concat ["(column_name = 'uw_", + String.concat ["(column_name IN ('uw_", CharVector.map Char.toLower (ident x), - "' AND data_type = '", + "', 'uw_", + ident x, + "') AND data_type = '", p_sql_type_base t, "'", if checkNullable then @@ -100,9 +102,9 @@ fun checkRel (table, checkNullable) (s, xts) = ")"]) xts), ")"] - val q'' = String.concat ["SELECT COUNT(*) FROM information_schema.columns WHERE table_name = '", - sl, - "' AND column_name LIKE 'uw_%'"] + val q'' = String.concat ["SELECT COUNT(*) FROM information_schema.columns WHERE ", + both, + " AND column_name LIKE 'uw_%'"] in box [string "if (mysql_query(conn->conn, \"", string q, |