Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/phpmyadmin/phpmyadmin.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNisarg Jhaveri <nisarg.jhaveri@research.iiit.ac.in>2014-10-14 21:52:15 +0400
committerNisarg Jhaveri <nisarg.jhaveri@research.iiit.ac.in>2014-10-14 21:52:15 +0400
commit6cc3ea6eae4a0cef0987cb40dfe8b2fc20ffe20a (patch)
treebeb0733df07169337c0c6dfe62ee2e1549b0f3bf /js/codemirror
parentbd25766b7b15b129515f6a0ae94ab9533216bdcf (diff)
Autocomplete table/column names in SQL editors
- In DB and Table level SQL editors, console - Updated CodeMirror addon `sql-hint.js` to newer version Signed-off-by: Nisarg Jhaveri <nisarg.jhaveri@research.iiit.ac.in>
Diffstat (limited to 'js/codemirror')
-rw-r--r--js/codemirror/addon/hint/sql-hint.js74
1 files changed, 54 insertions, 20 deletions
diff --git a/js/codemirror/addon/hint/sql-hint.js b/js/codemirror/addon/hint/sql-hint.js
index 20653b5318..c2b511fa2f 100644
--- a/js/codemirror/addon/hint/sql-hint.js
+++ b/js/codemirror/addon/hint/sql-hint.js
@@ -12,6 +12,7 @@
"use strict";
var tables;
+ var defaultTable;
var keywords;
var CONS = {
QUERY_DIV: ";",
@@ -43,18 +44,55 @@
}
}
- function columnCompletion(result, editor) {
+ function nameCompletion(result, editor) {
var cur = editor.getCursor();
var token = editor.getTokenAt(cur);
+ var useBacktick = (token.string.charAt(0) == "`");
var string = token.string.substr(1);
- var prevCur = Pos(cur.line, token.start);
- var table = editor.getTokenAt(prevCur).string;
- if (!tables.hasOwnProperty(table))
- table = findTableByAlias(table, editor);
- var columns = tables[table];
- if (!columns) return;
-
- addMatches(result, string, columns, function(w) {return "." + w;});
+ var prevToken = editor.getTokenAt(Pos(cur.line, token.start));
+ if (token.string.charAt(0) == "." || prevToken.string == "."){
+ //Suggest colunm names
+ if (prevToken.string == ".") {
+ var prevToken = editor.getTokenAt(Pos(cur.line, token.start - 1));
+ }
+ var table = prevToken.string;
+ //Check if backtick is used in table name. If yes, use it for columns too.
+ var useBacktickTable = false;
+ if (table.match(/`/g)) {
+ useBacktickTable = true;
+ table = table.replace(/`/g, "");
+ }
+ //Check if table is available. If not, find table by Alias
+ if (!tables.hasOwnProperty(table))
+ table = findTableByAlias(table, editor);
+ var columns = tables[table];
+ if (!columns) return;
+
+ if (useBacktick) {
+ addMatches(result, string, columns, function(w) {return "`" + w + "`";});
+ }
+ else if(useBacktickTable) {
+ addMatches(result, string, columns, function(w) {return ".`" + w + "`";});
+ }
+ else {
+ addMatches(result, string, columns, function(w) {return "." + w;});
+ }
+ }
+ else {
+ //Suggest table names or colums in defaultTable
+ while (token.start && string.charAt(0) == ".") {
+ token = editor.getTokenAt(Pos(cur.line, token.start - 1));
+ string = token.string + string;
+ }
+ if (useBacktick) {
+ addMatches(result, string, tables, function(w) {return "`" + w + "`";});
+ addMatches(result, string, defaultTable, function(w) {return "`" + w + "`";});
+ }
+ else {
+ addMatches(result, string, tables, function(w) {return w;});
+ addMatches(result, string, defaultTable, function(w) {return w;});
+ }
+ }
}
function eachWord(lineText, f) {
@@ -128,11 +166,14 @@
CodeMirror.registerHelper("hint", "sql", function(editor, options) {
tables = (options && options.tables) || {};
+ var defaultTableName = options && options.defaultTable;
+ defaultTable = (defaultTableName && tables[defaultTableName] || []);
keywords = keywords || getKeywords(editor);
+
var cur = editor.getCursor();
var result = [];
var token = editor.getTokenAt(cur), start, end, search;
- if (token.string.match(/^[.\w@]\w*$/)) {
+ if (token.string.match(/^[.`\w@]\w*$/)) {
search = token.string;
start = token.start;
end = token.end;
@@ -140,18 +181,11 @@
start = end = cur.ch;
search = "";
}
- if (search.charAt(0) == ".") {
- columnCompletion(result, editor);
- if (!result.length) {
- while (start && search.charAt(0) == ".") {
- token = editor.getTokenAt(Pos(cur.line, token.start - 1));
- start = token.start;
- search = token.string + search;
- }
- addMatches(result, search, tables, function(w) {return w;});
- }
+ if (search.charAt(0) == "." || search.charAt(0) == "`") {
+ nameCompletion(result, editor);
} else {
addMatches(result, search, tables, function(w) {return w;});
+ addMatches(result, search, defaultTable, function(w) {return w;});
addMatches(result, search, keywords, function(w) {return w.toUpperCase();});
}