Skip to content

Commit

Permalink
make autocomplete for large schemas faster (re getredash#232)
Browse files Browse the repository at this point in the history
  • Loading branch information
Allen Short authored and jezdez committed Mar 5, 2018
1 parent 0746ebf commit 5eaa966
Showing 1 changed file with 28 additions and 13 deletions.
41 changes: 28 additions & 13 deletions client/app/components/queries/query-editor.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ function queryEditor(QuerySnippet, $timeout) {
editor.getSession().setMode(newMode);
});

$scope.$watch('schema', (newSchema, oldSchema) => {
$scope.$watch('autoCompleteSchema', (newSchema, oldSchema) => {
if (newSchema !== oldSchema) {
if (newSchema === undefined) {
return;
Expand All @@ -89,8 +89,10 @@ function queryEditor(QuerySnippet, $timeout) {
// as it makes typing slower.
if (tokensCount > 5000) {
editor.setOption('enableLiveAutocompletion', false);
editor.setOption('enableBasicAutocompletion', false);
} else {
editor.setOption('enableLiveAutocompletion', true);
editor.setOption('enableBasicAutocompletion', true);
}
}
});
Expand All @@ -105,31 +107,44 @@ function queryEditor(QuerySnippet, $timeout) {

const schemaCompleter = {
getCompletions(state, session, pos, prefix, callback) {
if (prefix.length === 0 || !$scope.schema) {
// make a variable for the auto completion in the query editor
$scope.autoCompleteSchema = $scope.schema; // removeExtraSchemaInfo(

if (prefix.length === 0 || !$scope.autoCompleteSchema) {
callback(null, []);
return;
}

if (!$scope.schema.keywords) {
if (!$scope.autoCompleteSchema.keywords) {
const keywords = {};

$scope.schema.forEach((table) => {
$scope.autoCompleteSchema.forEach((table) => {
keywords[table.name] = 'Table';

table.columns.forEach((c) => {
keywords[c] = 'Column';
table.columns.forEach((c) => { // autoCompleteColumns
if (c.charAt(c.length - 1) === ')') {
let parensStartAt = c.indexOf('(') - 1;
c = c.substring(0, parensStartAt);
parensStartAt = 1; // linter complains without this line
}
// remove '[P] ' for partition keys
if (c.charAt(0) === '[') {
c = c.substring(4, c.length);
}
// keywords[c] = 'Column'; // dups columns
keywords[`${table.name}.${c}`] = 'Column';
});
});

$scope.schema.keywords = map(keywords, (v, k) => ({
name: k,
value: k,
score: 0,
meta: v,
}));
$scope.autoCompleteSchema.keywords = map(keywords, (v, k) =>
({
name: k,
value: k,
score: 0,
meta: v,
}));
}
callback(null, $scope.schema.keywords);
callback(null, $scope.autoCompleteSchema.keywords);
},
};

Expand Down

0 comments on commit 5eaa966

Please sign in to comment.