From 061a91144f85b23e9233ba8ae8665fa73cbf651d Mon Sep 17 00:00:00 2001 From: Avery Pennarun Date: Fri, 21 Nov 2008 16:29:59 -0500 Subject: [PATCH] versaplexd: "Re-quote" the parameter to LIST COLUMNS. It's actually a wildcard, with wildcard characters escaped by backslashes. To make backslash-escaped characters work, let's put them in [square brackets] instead. eg. My\_Table -> My[_]Table. --- versaplexd/vxapi.cs | 14 ++++++++++++-- versaplexd/vxschema.cs | 2 +- versaplexd/vxsqltokenizer.cs | 7 ++++++- 3 files changed, 19 insertions(+), 4 deletions(-) diff --git a/versaplexd/vxapi.cs b/versaplexd/vxapi.cs index e0c024b..11c9af1 100644 --- a/versaplexd/vxapi.cs +++ b/versaplexd/vxapi.cs @@ -93,8 +93,18 @@ internal static class VxDb { else if (next_tok.NotQuotedAndLowercaseEq("columns") && i < tokens.Length - 2) { - ret.tokenize("exec sp_columns @table_name='" + - tokens[i + 2].name + "';"); + string tabname = tokens[i + 2].name; + var sb = new StringBuilder(tabname.Length*2); + for (int b = 0; b < tabname.Length; b++) + { + if (tabname[b] == '\\' && b < tabname.Length-1) + sb.Append(new char[] + { '[', tabname[++b], ']' }); + else + sb.Append(tabname[b]); + } + ret.tokenize("exec sp_columns @table_name='{0}';", + sb); i += 2; } else if (next_tok.NotQuotedAndLowercaseEq("all") diff --git a/versaplexd/vxschema.cs b/versaplexd/vxschema.cs index 66f7e72..386193e 100644 --- a/versaplexd/vxschema.cs +++ b/versaplexd/vxschema.cs @@ -52,7 +52,7 @@ internal class VxSchemaElement : IComparable try { if (type == "Table") return new VxSchemaTable(name, text); - } catch (ArgumentException e) { + } catch (ArgumentException) { // if the table data is invalid, just ignore it. // We'll fall through and load a VxSchemaElement instead. } diff --git a/versaplexd/vxsqltokenizer.cs b/versaplexd/vxsqltokenizer.cs index f9e466c..6638e08 100644 --- a/versaplexd/vxsqltokenizer.cs +++ b/versaplexd/vxsqltokenizer.cs @@ -1,6 +1,6 @@ - using System; using System.Collections.Generic; +using Wv; public class VxSqlToken { @@ -388,6 +388,11 @@ public class VxSqlTokenizer } */ } + + public void tokenize(string fmt, params object[] args) + { + tokenize(wv.fmt(fmt, args)); + } public VxSqlTokenizer(string query) { -- 2.11.4.GIT