(ctx context.Context, cCtx base.CompletionContext, statement string, caretLine int, caretOffset int)
| 145 | } |
| 146 | |
| 147 | func NewStandardCompleter(ctx context.Context, cCtx base.CompletionContext, statement string, caretLine int, caretOffset int) *Completer { |
| 148 | sql, byteOffset := computeSQLAndByteOffset(statement, caretLine, caretOffset, false /* tricky */) |
| 149 | tokens := pgparser.Tokenize(sql) |
| 150 | caretTokenIndex := findCaretTokenIndex(tokens, byteOffset) |
| 151 | defaultSchema := cCtx.DefaultSchema |
| 152 | schemaNotSelected := defaultSchema == "" |
| 153 | if defaultSchema == "" { |
| 154 | defaultSchema = "public" |
| 155 | } |
| 156 | return &Completer{ |
| 157 | ctx: ctx, |
| 158 | scene: cCtx.Scene, |
| 159 | sql: sql, |
| 160 | cursorByteOffset: byteOffset, |
| 161 | tokens: tokens, |
| 162 | caretTokenIndex: caretTokenIndex, |
| 163 | instanceID: cCtx.InstanceID, |
| 164 | defaultDatabase: cCtx.DefaultDatabase, |
| 165 | defaultSchema: defaultSchema, |
| 166 | schemaNotSelected: schemaNotSelected, |
| 167 | getMetadata: cCtx.Metadata, |
| 168 | listDatabaseNames: cCtx.ListDatabaseNames, |
| 169 | metadataCache: make(map[string]*model.DatabaseMetadata), |
| 170 | cteCache: make(map[int][]*base.VirtualTableReference), |
| 171 | } |
| 172 | } |
| 173 | |
| 174 | // findCaretTokenIndex returns the index of the first token whose start (Loc) |
| 175 | // is at or past byteOffset. This matches ANTLR Scanner.SeekPosition semantics: |
no test coverage detected