|
20 | 20 | }; |
21 | 21 | var Pos = CodeMirror.Pos; |
22 | 22 |
|
| 23 | + function isArray(val) { return Object.prototype.toString.call(val) == "[object Array]" } |
| 24 | + |
23 | 25 | function getKeywords(editor) { |
24 | 26 | var mode = editor.doc.modeOption; |
25 | 27 | if (mode === "sql") mode = "text/x-sql"; |
|
30 | 32 | return typeof item == "string" ? item : item.text; |
31 | 33 | } |
32 | 34 |
|
33 | | - function getItem(list, item) { |
34 | | - if (!list.slice) return list[item]; |
35 | | - for (var i = list.length - 1; i >= 0; i--) if (getText(list[i]) == item) |
36 | | - return list[i]; |
| 35 | + function wrapTable(name, value) { |
| 36 | + if (isArray(value)) value = {columns: value} |
| 37 | + if (!value.text) value.text = name |
| 38 | + return value |
| 39 | + } |
| 40 | + |
| 41 | + function parseTables(input) { |
| 42 | + var result = {} |
| 43 | + if (isArray(input)) { |
| 44 | + for (var i = input.length - 1; i >= 0; i--) { |
| 45 | + var item = input[i] |
| 46 | + result[getText(item).toUpperCase()] = wrapTable(getText(item), item) |
| 47 | + } |
| 48 | + } else if (input) { |
| 49 | + for (var name in input) |
| 50 | + result[name.toUpperCase()] = wrapTable(name, input[name]) |
| 51 | + } |
| 52 | + return result |
| 53 | + } |
| 54 | + |
| 55 | + function getTable(name) { |
| 56 | + return tables[name.toUpperCase()] |
37 | 57 | } |
38 | 58 |
|
39 | 59 | function shallowClone(object) { |
|
50 | 70 | } |
51 | 71 |
|
52 | 72 | function addMatches(result, search, wordlist, formatter) { |
53 | | - for (var word in wordlist) { |
54 | | - if (!wordlist.hasOwnProperty(word)) continue; |
55 | | - if (wordlist.slice) word = wordlist[word]; |
56 | | - |
57 | | - if (match(search, word)) result.push(formatter(word)); |
| 73 | + if (isArray(wordlist)) { |
| 74 | + for (var i = 0; i < wordlist.length; i++) |
| 75 | + if (match(search, wordlist[i])) result.push(formatter(wordlist[i])) |
| 76 | + } else { |
| 77 | + for (var word in wordlist) if (wordlist.hasOwnProperty(word)) { |
| 78 | + var val = wordlist[word] |
| 79 | + if (!val || val === true) |
| 80 | + val = word |
| 81 | + else |
| 82 | + val = val.displayText ? {text: val.text, displayText: val.displayText} : val.text |
| 83 | + if (match(search, val)) result.push(formatter(val)) |
| 84 | + } |
58 | 85 | } |
59 | 86 | } |
60 | 87 |
|
|
115 | 142 | var alias = false; |
116 | 143 | var aliasTable = table; |
117 | 144 | // Check if table is available. If not, find table by Alias |
118 | | - if (!getItem(tables, table)) { |
| 145 | + if (!getTable(table)) { |
119 | 146 | var oldTable = table; |
120 | 147 | table = findTableByAlias(table, editor); |
121 | 148 | if (table !== oldTable) alias = true; |
122 | 149 | } |
123 | 150 |
|
124 | | - var columns = getItem(tables, table); |
| 151 | + var columns = getTable(table); |
125 | 152 | if (columns && columns.columns) |
126 | 153 | columns = columns.columns; |
127 | 154 |
|
|
184 | 211 | //find valid range |
185 | 212 | var prevItem = 0; |
186 | 213 | var current = convertCurToNumber(editor.getCursor()); |
187 | | - for (var i=0; i< separator.length; i++) { |
| 214 | + for (var i = 0; i < separator.length; i++) { |
188 | 215 | var _v = convertCurToNumber(separator[i]); |
189 | 216 | if (current > prevItem && current <= _v) { |
190 | 217 | validRange = { start: convertNumberToCur(prevItem), end: convertNumberToCur(_v) }; |
|
199 | 226 | var lineText = query[i]; |
200 | 227 | eachWord(lineText, function(word) { |
201 | 228 | var wordUpperCase = word.toUpperCase(); |
202 | | - if (wordUpperCase === aliasUpperCase && getItem(tables, previousWord)) |
| 229 | + if (wordUpperCase === aliasUpperCase && getTable(previousWord)) |
203 | 230 | table = previousWord; |
204 | 231 | if (wordUpperCase !== CONS.ALIAS_KEYWORD) |
205 | 232 | previousWord = word; |
|
210 | 237 | } |
211 | 238 |
|
212 | 239 | CodeMirror.registerHelper("hint", "sql", function(editor, options) { |
213 | | - tables = (options && options.tables) || {}; |
| 240 | + tables = parseTables(options && options.tables) |
214 | 241 | var defaultTableName = options && options.defaultTable; |
215 | 242 | var disableKeywords = options && options.disableKeywords; |
216 | | - defaultTable = defaultTableName && getItem(tables, defaultTableName); |
| 243 | + defaultTable = defaultTableName && getTable(defaultTableName); |
217 | 244 | keywords = keywords || getKeywords(editor); |
218 | 245 |
|
219 | 246 | if (defaultTableName && !defaultTable) |
|
0 commit comments