public override void GetSuggestions(SuggestionList s) { SuggestionContext sc = s.suggestionContext; if (s.enableSuggestColumns) { if (parentQuery.select != null) { sc.AddColumnsInSelectList(); } if (s.textEntered.Length > 0) { sc.AddColumnsInFromTables(); } } if (columns.Count > 0 && s.enableSuggestKeywords) { if (sc.last.hasComma == false) { s.AddKeyword("desc"); s.AddKeyword("asc"); } sc.SuggestPrimaryKeywords(); } }
public SuggestionContext(SuggestionList sug, Token p) { suggestions = sug; parent = p; suggestions.includeAliases = suggestions.enableAutoSuggestAliases; if (suggestions.includeAliases == false && suggestions.enableSuggestAliases) { CheckForAlias(); } }
public override void GetSuggestions(SuggestionList s) { SuggestionContext sc = s.suggestionContext; if (sc.last == null) { sc.suggestColumns = true; } else { if (sc.last.type.IsOneOf("conjunction")) { sc.suggestColumns = true; } else if (sc.last.type == "operator") { sc.suggestColumns = true; if (sc.lastColumn.token != null) { Column c = sc.lastColumn.token as Column; sc.suggestColumnsDataType = c.dbColumn.dataType; } } else if (sc.last.type.IsOneOf("column", "literal")) { sc.suggestOperators = sc.lastOperator.pos < sc.lastConjunction.pos; sc.suggestPrimaryKeywords = sc.suggestConjunctions = sc.lastOperator.pos == 0 || sc.lastOperator.pos > sc.lastConjunction.pos; } else { sc.suggestColumns = true; } } if (sc.suggestColumns && s.enableSuggestColumns) { sc.AddAllColumnsInQuery(); sc.AddColumnsInFromTables(); } if (s.enableSuggestKeywords) { if (sc.suggestConjunctions) { sc.SuggestConjunctions(); } if (sc.suggestOperators) { sc.SuggestOperators(); } if (sc.suggestPrimaryKeywords) { sc.SuggestPrimaryKeywords(); } } }
public SuggestionContext(SuggestionList sug, Token p, int pos, string textEntered) { suggestions = sug; parent = p; suggestions.includeAliases = suggestions.enableAutoSuggestAliases; if (suggestions.includeAliases == false && suggestions.enableSuggestAliases) { CheckForAlias(); } tokens = p.GetTokensWithin(); Token lastToken = tokens.GetTokenBeforeOrAtRandomOffset(pos); if (lastToken != null && lastToken.tokenType == TokenType.Identifier && textEntered.StartsWith(lastToken.name)) { lastToken = lastToken.GetPrevToken(); } if (lastToken != null) { last = new SuggestionContextItem(lastToken, true); lastKeyword = InitItem(TokenType.Keyword); lastLiteral = InitItem(TokenType.Literal); lastTable = InitItem(TokenType.Table); lastOperator = InitItem(TokenType.Operator); lastConjunction = InitItem(TokenType.Keyword, new[] { "and", "or", "not" }); lastColumn = InitItem(TokenType.Column); if (lastTable.token != null) { if (lastTable.isLast) { lastTable.hasComma = lastTable.token.charAfter == ','; } else { Table t = lastTable.token as Table; if (t.tableAliasToken != null && t.tableAliasToken == last.token) { last = lastTable; lastTable.aliasToken = t.tableAliasToken; lastTable.hasComma = t.tableAliasToken.charAfter == ','; } } } if (last.type == "column" && last.token != null && last.token.charAfter == ',') { last.hasComma = true; } } }
public override void GetSuggestions(SuggestionList s) { SuggestionContext sc = s.suggestionContext; if (s.enableSuggestKeywords && sc.last != null && ((sc.last.type == "column" && sc.last.hasComma == false) || (sc.last.type == "identifier" && sc.lastColumn != null && sc.lastColumn.hasComma == false))) { sc.SuggestPrimaryKeywords(); } else if (s.enableSuggestColumns) { if (columns.Count > 0 || candidateTables.Count > 0) { sc.suggestPrimaryKeywords = true; } if (s.textEntered.Contains(".")) { s.includeAliases = s.enableSuggestAliases; string alias = s.textEntered.Substring(0, s.textEntered.IndexOf(".")); string table = columns.GetTableNameForTableAlias(alias); if (table == null) { table = Db.GetTableNameByAlias(alias, null); } if (table != null) { sc.AddColumnsInTable(table, alias); } foreach (string t in Db.GetPossibleTablesForAlias(alias)) { sc.AddColumnsInTable(t, alias); } } sc.AddColumnsInFromTables(); sc.AddColumnsInSelectCandidateList(); sc.AddAllColumns(); } }
public virtual void GetSuggestions(SuggestionList result) { }
public override void GetSuggestions(SuggestionList s) { if (parentQuery.select == null) { return; } SuggestionContext sc = s.suggestionContext; Table rightTable = null; Table leftTable = null; if (sc.last == null) { sc.suggestTables = true; } else { rightTable = sc.lastTable.token != null ? sc.lastTable.token as Table : null; leftTable = rightTable == null ? null : sc.tokens.GetNearestTokenBefore(rightTable, TokenType.Table) as Table; if (rightTable == null) { sc.suggestTables = true; } else if (sc.last.type.IsOneOf("conjunction")) { sc.suggestColumns = true; } else if (sc.last.type == "operator") { sc.suggestColumns = true; if (sc.lastColumn.token != null) { Column c = sc.lastColumn.token as Column; sc.suggestColumnsDataType = c.dbColumn.dataType; } } else if (sc.last.type.IsOneOf("identifier", "column", "literal")) { sc.suggestOperators = sc.lastOperator.pos < sc.lastConjunction.pos; sc.suggestPrimaryKeywords = sc.suggestConjunctions = sc.lastOperator.pos == 0 || sc.lastOperator.pos > sc.lastConjunction.pos; sc.suggestJoin = sc.lastOperator.pos > sc.lastKeyword.pos; } else if (sc.last.type == "table") { sc.suggestPrimaryKeywords = (sc.lastKeyword.isJoin == false); if (sc.last.hasComma) { sc.suggestTables = true; } else { sc.suggestAlias = true; sc.suggestJoin = sc.lastKeyword.isJoin == false; sc.suggestJoinExpression = sc.suggestOn = !sc.suggestJoin; } } else if (sc.last.isOn) { sc.suggestColumns = true; sc.suggestJoinExpression = true; } else if (sc.last.isJoin) { sc.suggestTables = true; } } if (sc.suggestJoinExpression && s.enableSuggestJoins && rightTable != null && leftTable != null) { string join = leftTable.dbTable.RenderJoinCols(rightTable.name, s.includeAliases); if (join != null) { if (sc.suggestOn) { join = "on " + join; } s.Add(new Suggestion(TokenType.Expression, join)); } } if (sc.suggestJoin && s.enableSuggestKeywords) { s.AddKeyword("inner join", true); } if (sc.suggestOn && s.enableSuggestKeywords) { s.AddKeyword("on", true); } if (sc.suggestAlias && s.enableSuggestAliases && rightTable != null && rightTable.dbTable != null) { foreach (string alias in rightTable.dbTable.aliases.Keys) { s.Add(new Suggestion(TokenType.Identifier, alias)); } s.Add(new Suggestion(TokenType.Identifier, Db.GetAliasForTable(rightTable.dbTable.name, false))); } if (sc.suggestColumns && s.enableSuggestColumns) { if (rightTable != null && rightTable.dbTable != null) { sc.AddColumnsInTable(leftTable, true); sc.AddColumnsInTable(rightTable, true); sc.AddColumnsInTable(leftTable); sc.AddColumnsInTable(rightTable); sc.AddColumnsInFromTables(); } } if (sc.suggestTables && s.enableSuggestTables) { QList <string> names = new QList <string>(); QList <string> list = new QList <string>(); foreach (Column c in parentQuery.select.columns.tokens) { if (c.table != null && c.table.dbTable != null && (c.columnType == Column.ColumnType.Db)) { list.AddIfNotExists(c.table.dbTable.name); } sc.AddTable(c.tableName); } foreach (DbColumn c in Query.columnHints) { sc.AddTable(c.table.name); } if (rightTable != null && rightTable.dbTable != null) { /* * if (rightTable.tableAlias != null) * aliasFound = true; * // need to sort these tables by most recently used * names.MergeRange(Db.relationships.GetRelatedTables(rightTable.dbTable.name)); * foreach (string name in names.Each()) * sc.AddTable(name, aliasFound ? Db.GetAliasForTable(name, true) : ""); * names.Clear(); */ } if (s.textEntered.Trim() != "") { foreach (Column c in parentQuery.select.columns.tokens) { if ((c.tableAlias == null || c.columnType == Column.ColumnType.Proposed) && c.tableName != null && Db.tables.ContainsKey(c.tableName)) { list.AddIfNotExists(c.tableName); names.AddIfNotExists(c.tableName); } } foreach (string srcTable in list.Each()) { names.MergeRange(Db.TableNamesSortedByUsage(Db.tables[srcTable].accessibleTableNames)); } names.MergeRange(Db.tables.Keys); foreach (string name in names.Each()) { sc.AddTable(name); } } } }