The editor now has context aware completions
This commit is contained in:
parent
1a1bbd0838
commit
960967c8a6
18 changed files with 1984 additions and 0 deletions
70
core/SqlContext.h
Normal file
70
core/SqlContext.h
Normal file
|
|
@ -0,0 +1,70 @@
|
|||
#ifndef SQLCONTEXT_H
|
||||
#define SQLCONTEXT_H
|
||||
|
||||
#include <QString>
|
||||
#include <vector>
|
||||
|
||||
/**
|
||||
* Kind of names that are expected at the cursor position.
|
||||
*/
|
||||
enum class CompletionKind {
|
||||
None,
|
||||
Relation, // schema, table or view name
|
||||
Column, // column name of the relations in scope
|
||||
QualifiedColumn, // column after "alias." or "table."
|
||||
Schema,
|
||||
Function,
|
||||
JoinTarget // complete "table alias ON ..." proposal after JOIN
|
||||
};
|
||||
|
||||
/**
|
||||
* Part of the statement the cursor is in.
|
||||
*/
|
||||
enum class SqlClause {
|
||||
None,
|
||||
Select,
|
||||
From,
|
||||
Join,
|
||||
On,
|
||||
Where,
|
||||
GroupBy,
|
||||
OrderBy,
|
||||
Having,
|
||||
Set,
|
||||
Update,
|
||||
InsertInto,
|
||||
Returning,
|
||||
Values
|
||||
};
|
||||
|
||||
/**
|
||||
* An item of a FROM clause (or UPDATE/INSERT target, CTE, derived table).
|
||||
* Names are normalised: unquoted identifiers are folded to lower case.
|
||||
*/
|
||||
struct RelationRef {
|
||||
QString schema;
|
||||
QString name; // may be a CTE name or the alias of a derived table
|
||||
QString alias;
|
||||
bool quoted = false; // name was written as quoted identifier
|
||||
bool derived = false; // CTE or sub query, columns are not in the catalog
|
||||
};
|
||||
|
||||
struct SqlContext {
|
||||
CompletionKind kind = CompletionKind::None;
|
||||
SqlClause clause = SqlClause::None;
|
||||
QString prefix; // identifier text typed so far (without opening quote)
|
||||
int prefixStart = 0; // replace range in document
|
||||
int prefixLen = 0;
|
||||
QString qualifier; // text before '.', if any
|
||||
QString qualifierSchema; // for schema.table.
|
||||
std::vector<RelationRef> relations; // relations in scope, innermost query first
|
||||
bool prefixWasQuoted = false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Tolerant analysis of possibly incomplete SQL around the cursor.
|
||||
* @param cursorPos position in text (between characters) where completion is requested.
|
||||
*/
|
||||
SqlContext analyzeSqlContext(const QString &text, int cursorPos);
|
||||
|
||||
#endif // SQLCONTEXT_H
|
||||
Loading…
Add table
Add a link
Reference in a new issue