fun testInvalidWith()

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"
      ),
    )
  }