123456789101112131415161718192021222324252627282930313233343536373839404142 |
- import { LinkedToken } from '../../monarch/LinkedToken';
- import { FROM, SCHEMA, SELECT } from '../language';
- import { SQLTokenTypes } from './types';
- export const getSelectToken = (currentToken: LinkedToken | null) =>
- currentToken?.getPreviousOfType(SQLTokenTypes.Keyword, SELECT) ?? null;
- export const getSelectStatisticToken = (currentToken: LinkedToken | null) => {
- const assumedStatisticToken = getSelectToken(currentToken)?.getNextNonWhiteSpaceToken();
- return assumedStatisticToken?.isVariable() || assumedStatisticToken?.isFunction() ? assumedStatisticToken : null;
- };
- export const getMetricNameToken = (currentToken: LinkedToken | null) => {
- // statistic function is followed by `(` and then an argument
- const assumedMetricNameToken = getSelectStatisticToken(currentToken)?.next?.next;
- return assumedMetricNameToken?.isVariable() || assumedMetricNameToken?.isIdentifier() ? assumedMetricNameToken : null;
- };
- export const getFromKeywordToken = (currentToken: LinkedToken | null) => {
- const selectToken = getSelectToken(currentToken);
- return selectToken?.getNextOfType(SQLTokenTypes.Keyword, FROM);
- };
- export const getNamespaceToken = (currentToken: LinkedToken | null) => {
- const fromToken = getFromKeywordToken(currentToken);
- const nextNonWhiteSpace = fromToken?.getNextNonWhiteSpaceToken();
- if (
- nextNonWhiteSpace?.isDoubleQuotedString() ||
- (nextNonWhiteSpace?.isVariable() && nextNonWhiteSpace?.value.toUpperCase() !== SCHEMA)
- ) {
- // schema is not used
- return nextNonWhiteSpace;
- } else if (nextNonWhiteSpace?.isKeyword() && nextNonWhiteSpace.next?.is(SQLTokenTypes.Parenthesis, '(')) {
- // schema is specified
- const assumedNamespaceToken = nextNonWhiteSpace.next?.next;
- if (assumedNamespaceToken?.isDoubleQuotedString() || assumedNamespaceToken?.isVariable()) {
- return assumedNamespaceToken;
- }
- }
- return null;
- };
|