in android-lang/testSrc/com/android/tools/idea/lang/androidSql/parser/AndroidSqlParserTest.kt [1419:1618]
fun testInvalidWith() {
assertEquals(
"""
FILE
AndroidSqlWithClauseStatementImpl(WITH_CLAUSE_STATEMENT)
AndroidSqlWithClauseImpl(WITH_CLAUSE)
PsiElement(WITH)('WITH')
PsiErrorElement:<table definition name> or RECURSIVE expected, got 'SELECT'
<empty list>
AndroidSqlSelectStatementImpl(SELECT_STATEMENT)
AndroidSqlSelectCoreImpl(SELECT_CORE)
AndroidSqlSelectCoreSelectImpl(SELECT_CORE_SELECT)
PsiElement(SELECT)('SELECT')
AndroidSqlResultColumnsImpl(RESULT_COLUMNS)
AndroidSqlResultColumnImpl(RESULT_COLUMN)
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('foo')
AndroidSqlFromClauseImpl(FROM_CLAUSE)
PsiElement(FROM)('FROM')
AndroidSqlTableOrSubqueryImpl(TABLE_OR_SUBQUERY)
AndroidSqlFromTableImpl(FROM_TABLE)
AndroidSqlDefinedTableNameImpl(DEFINED_TABLE_NAME)
PsiElement(IDENTIFIER)('bar')
"""
.trimIndent(),
toParseTreeText("WITH SELECT foo FROM bar"),
)
assertEquals(
"""
FILE
AndroidSqlWithClauseStatementImpl(WITH_CLAUSE_STATEMENT)
AndroidSqlWithClauseImpl(WITH_CLAUSE)
PsiElement(WITH)('WITH')
PsiElement(IDENTIFIER)('ids')
PsiErrorElement:'(' or AS expected, got 'SELECT'
<empty list>
AndroidSqlSelectStatementImpl(SELECT_STATEMENT)
AndroidSqlSelectCoreImpl(SELECT_CORE)
AndroidSqlSelectCoreSelectImpl(SELECT_CORE_SELECT)
PsiElement(SELECT)('SELECT')
AndroidSqlResultColumnsImpl(RESULT_COLUMNS)
AndroidSqlResultColumnImpl(RESULT_COLUMN)
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('foo')
AndroidSqlFromClauseImpl(FROM_CLAUSE)
PsiElement(FROM)('FROM')
AndroidSqlTableOrSubqueryImpl(TABLE_OR_SUBQUERY)
AndroidSqlFromTableImpl(FROM_TABLE)
AndroidSqlDefinedTableNameImpl(DEFINED_TABLE_NAME)
PsiElement(IDENTIFIER)('bar')
"""
.trimIndent(),
toParseTreeText("WITH ids SELECT foo FROM bar"),
)
assertEquals(
"""
FILE
AndroidSqlWithClauseStatementImpl(WITH_CLAUSE_STATEMENT)
AndroidSqlWithClauseImpl(WITH_CLAUSE)
PsiElement(WITH)('WITH')
PsiElement(IDENTIFIER)('ids')
PsiElement(AS)('AS')
PsiErrorElement:'(' expected, got 'SELECT'
<empty list>
AndroidSqlSelectStatementImpl(SELECT_STATEMENT)
AndroidSqlSelectCoreImpl(SELECT_CORE)
AndroidSqlSelectCoreSelectImpl(SELECT_CORE_SELECT)
PsiElement(SELECT)('SELECT')
AndroidSqlResultColumnsImpl(RESULT_COLUMNS)
AndroidSqlResultColumnImpl(RESULT_COLUMN)
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('foo')
AndroidSqlFromClauseImpl(FROM_CLAUSE)
PsiElement(FROM)('FROM')
AndroidSqlTableOrSubqueryImpl(TABLE_OR_SUBQUERY)
AndroidSqlFromTableImpl(FROM_TABLE)
AndroidSqlDefinedTableNameImpl(DEFINED_TABLE_NAME)
PsiElement(IDENTIFIER)('bar')
"""
.trimIndent(),
toParseTreeText("WITH ids AS SELECT foo FROM bar"),
)
assertEquals(
"""
FILE
AndroidSqlWithClauseStatementImpl(WITH_CLAUSE_STATEMENT)
AndroidSqlWithClauseImpl(WITH_CLAUSE)
PsiElement(WITH)('WITH')
PsiElement(IDENTIFIER)('ids')
PsiElement(AS)('AS')
PsiErrorElement:'(' expected, got 'foo'
PsiElement(IDENTIFIER)('foo')
AndroidSqlSelectStatementImpl(SELECT_STATEMENT)
AndroidSqlSelectCoreImpl(SELECT_CORE)
AndroidSqlSelectCoreSelectImpl(SELECT_CORE_SELECT)
PsiElement(SELECT)('SELECT')
AndroidSqlResultColumnsImpl(RESULT_COLUMNS)
AndroidSqlResultColumnImpl(RESULT_COLUMN)
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('foo')
AndroidSqlFromClauseImpl(FROM_CLAUSE)
PsiElement(FROM)('FROM')
AndroidSqlTableOrSubqueryImpl(TABLE_OR_SUBQUERY)
AndroidSqlFromTableImpl(FROM_TABLE)
AndroidSqlDefinedTableNameImpl(DEFINED_TABLE_NAME)
PsiElement(IDENTIFIER)('bar')
"""
.trimIndent(),
toParseTreeText("WITH ids AS foo SELECT foo FROM bar"),
)
assertEquals(
"""
FILE
AndroidSqlWithClauseStatementImpl(WITH_CLAUSE_STATEMENT)
AndroidSqlWithClauseImpl(WITH_CLAUSE)
PsiElement(WITH)('WITH')
PsiElement(IDENTIFIER)('ids')
PsiElement(AS)('AS')
PsiErrorElement:'(' expected, got 'foo'
PsiElement(IDENTIFIER)('foo')
PsiElement(WHERE)('WHERE')
PsiElement(IDENTIFIER)('makes')
PsiElement(NO)('no')
PsiElement(IDENTIFIER)('sense')
AndroidSqlSelectStatementImpl(SELECT_STATEMENT)
AndroidSqlSelectCoreImpl(SELECT_CORE)
AndroidSqlSelectCoreSelectImpl(SELECT_CORE_SELECT)
PsiElement(SELECT)('SELECT')
AndroidSqlResultColumnsImpl(RESULT_COLUMNS)
AndroidSqlResultColumnImpl(RESULT_COLUMN)
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('foo')
AndroidSqlFromClauseImpl(FROM_CLAUSE)
PsiElement(FROM)('FROM')
AndroidSqlTableOrSubqueryImpl(TABLE_OR_SUBQUERY)
AndroidSqlFromTableImpl(FROM_TABLE)
AndroidSqlDefinedTableNameImpl(DEFINED_TABLE_NAME)
PsiElement(IDENTIFIER)('bar')
"""
.trimIndent(),
toParseTreeText("WITH ids AS foo WHERE makes no sense SELECT foo FROM bar"),
)
assertEquals(
"""
FILE
AndroidSqlWithClauseStatementImpl(WITH_CLAUSE_STATEMENT)
AndroidSqlWithClauseImpl(WITH_CLAUSE)
PsiElement(WITH)('WITH')
AndroidSqlWithClauseTableImpl(WITH_CLAUSE_TABLE)
AndroidSqlWithClauseTableDefImpl(WITH_CLAUSE_TABLE_DEF)
AndroidSqlTableDefinitionNameImpl(TABLE_DEFINITION_NAME)
PsiElement(IDENTIFIER)('ids')
PsiElement(AS)('AS')
PsiElement(()('(')
AndroidSqlSelectStatementImpl(SELECT_STATEMENT)
AndroidSqlSelectCoreImpl(SELECT_CORE)
AndroidSqlSelectCoreSelectImpl(SELECT_CORE_SELECT)
PsiElement(SELECT)('SELECT')
AndroidSqlResultColumnsImpl(RESULT_COLUMNS)
AndroidSqlResultColumnImpl(RESULT_COLUMN)
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('something')
AndroidSqlColumnAliasNameImpl(COLUMN_ALIAS_NAME)
PsiElement(IDENTIFIER)('stupid')
AndroidSqlWhereClauseImpl(WHERE_CLAUSE)
PsiElement(WHERE)('WHERE')
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('doesnt')
PsiErrorElement:'(', '.', <compound operator>, BETWEEN, GROUP, IN, LIMIT, ORDER or WINDOW expected, got 'parse'
PsiElement(IDENTIFIER)('parse')
PsiElement())(')')
AndroidSqlSelectStatementImpl(SELECT_STATEMENT)
AndroidSqlSelectCoreImpl(SELECT_CORE)
AndroidSqlSelectCoreSelectImpl(SELECT_CORE_SELECT)
PsiElement(SELECT)('SELECT')
AndroidSqlResultColumnsImpl(RESULT_COLUMNS)
AndroidSqlResultColumnImpl(RESULT_COLUMN)
AndroidSqlColumnRefExpressionImpl(COLUMN_REF_EXPRESSION)
AndroidSqlColumnNameImpl(COLUMN_NAME)
PsiElement(IDENTIFIER)('foo')
AndroidSqlFromClauseImpl(FROM_CLAUSE)
PsiElement(FROM)('FROM')
AndroidSqlTableOrSubqueryImpl(TABLE_OR_SUBQUERY)
AndroidSqlFromTableImpl(FROM_TABLE)
AndroidSqlDefinedTableNameImpl(DEFINED_TABLE_NAME)
PsiElement(IDENTIFIER)('bar')
"""
.trimIndent(),
toParseTreeText(
"WITH ids AS (SELECT something stupid WHERE doesnt parse) SELECT foo FROM bar"
),
)
}