From 9896af3c015cb8f945b69009fef5f287ad58d6bd Mon Sep 17 00:00:00 2001 From: xterao Date: Mon, 12 May 2025 17:03:46 +0900 Subject: [PATCH] Fix issue where grouped conditions in block comments were recognized as bind variables --- .../org/domaframework/doma/intellij/Sql.bnf | 4 +- .../doma/intellij/psi/SqlCustomExprImpl.java | 10 +- .../extension/expr/SqlElExtensions.kt | 3 +- .../document/SqlSymbolDocumentTestCase.kt | 3 +- src/test/testData/sql/parser/SQLParser.sql | 4 +- src/test/testData/sql/parser/SQLParser.txt | 560 +++++++++--------- .../bindVariableInFunctionParameters.sql | 3 +- 7 files changed, 310 insertions(+), 277 deletions(-) diff --git a/src/main/java/org/domaframework/doma/intellij/Sql.bnf b/src/main/java/org/domaframework/doma/intellij/Sql.bnf index 407fbb42..19dcbfcc 100644 --- a/src/main/java/org/domaframework/doma/intellij/Sql.bnf +++ b/src/main/java/org/domaframework/doma/intellij/Sql.bnf @@ -136,7 +136,7 @@ el_and_expr ::= el_expr "&&" el_expr el_or_expr ::= el_expr "||" el_expr // term -el_term_expr ::= el_comparison_expr_group | el_arithmetic_expr_group | el_factor_expr +el_term_expr ::= el_comparison_expr_group | el_arithmetic_expr_group | el_factor_expr | el_paren_expr private el_comparison_expr_group ::= el_eq_expr | el_ne_expr | el_lt_expr | el_le_expr | el_gt_expr | el_ge_expr private el_arithmetic_expr_group ::= el_add_expr | el_subtract_expr | el_multiply_expr | el_divide_expr | el_mod_expr el_eq_expr ::= el_factor_expr "==" el_factor_expr @@ -165,7 +165,7 @@ el_class ::= el_id_expr ("." el_id_expr)* el_parameters ::= "(" (el_expr ("," el_expr)*)? ")" {pin=1} // primary -el_primary_expr ::= el_literal_expr | el_id_expr | el_paren_expr +el_primary_expr ::= el_literal_expr | el_id_expr //| el_paren_expr private el_literal_expr ::= EL_NULL | BOOLEAN | (EL_PLUS | EL_MINUS)? EL_NUMBER | EL_STRING | EL_CHAR el_id_expr ::= EL_IDENTIFIER { diff --git a/src/main/java/org/domaframework/doma/intellij/psi/SqlCustomExprImpl.java b/src/main/java/org/domaframework/doma/intellij/psi/SqlCustomExprImpl.java index f95786df..a2f26604 100644 --- a/src/main/java/org/domaframework/doma/intellij/psi/SqlCustomExprImpl.java +++ b/src/main/java/org/domaframework/doma/intellij/psi/SqlCustomExprImpl.java @@ -19,9 +19,12 @@ import com.intellij.lang.ASTNode; import com.intellij.psi.PsiReference; import com.intellij.psi.impl.source.resolve.reference.ReferenceProvidersRegistry; +import com.intellij.psi.util.PsiTreeUtil; import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; -public class SqlCustomExprImpl extends ASTWrapperPsiElement implements SqlCustomElExpr { +public class SqlCustomExprImpl extends ASTWrapperPsiElement + implements SqlCustomElExpr, SqlElTermExpr { public SqlCustomExprImpl(@NotNull ASTNode node) { super(node); @@ -31,4 +34,9 @@ public SqlCustomExprImpl(@NotNull ASTNode node) { public PsiReference @NotNull [] getReferences() { return ReferenceProvidersRegistry.getReferencesFromProviders(this); } + + @Override + public @Nullable SqlElExpr getElExpr() { + return PsiTreeUtil.getChildOfAnyType(this, SqlElExpr.class); + } } diff --git a/src/main/kotlin/org/domaframework/doma/intellij/extension/expr/SqlElExtensions.kt b/src/main/kotlin/org/domaframework/doma/intellij/extension/expr/SqlElExtensions.kt index 4783d98e..6bc137dd 100644 --- a/src/main/kotlin/org/domaframework/doma/intellij/extension/expr/SqlElExtensions.kt +++ b/src/main/kotlin/org/domaframework/doma/intellij/extension/expr/SqlElExtensions.kt @@ -34,7 +34,8 @@ val SqlElStaticFieldAccessExpr.accessElements: List val SqlElFieldAccessExpr.accessElements: List get() = - this.elExprList + this + .getElPrimaryExprList() .mapNotNull { it as SqlElIdExpr } .sortedBy { it.textOffset } .toList() diff --git a/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt b/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt index c760f738..036b0f38 100644 --- a/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt +++ b/src/test/kotlin/org/domaframework/doma/intellij/document/SqlSymbolDocumentTestCase.kt @@ -18,6 +18,7 @@ package org.domaframework.doma.intellij.document import com.intellij.openapi.vfs.VirtualFile import com.intellij.psi.PsiElement import org.domaframework.doma.intellij.DomaSqlTest +import org.domaframework.doma.intellij.extension.expr.accessElements import org.domaframework.doma.intellij.psi.SqlBlockComment import org.domaframework.doma.intellij.psi.SqlElFieldAccessExpr import org.domaframework.doma.intellij.psi.SqlElForDirective @@ -196,6 +197,6 @@ class SqlSymbolDocumentTestCase : DomaSqlTest() { return forDirective.elExprList.firstOrNull { it.text == searchElementName } } - return fieldAccessExpr.elExprList.firstOrNull { it.text == searchElementName } + return fieldAccessExpr.accessElements.firstOrNull { it?.text == searchElementName } } } diff --git a/src/test/testData/sql/parser/SQLParser.sql b/src/test/testData/sql/parser/SQLParser.sql index fdb177a4..deb4c43f 100644 --- a/src/test/testData/sql/parser/SQLParser.sql +++ b/src/test/testData/sql/parser/SQLParser.sql @@ -14,10 +14,10 @@ SELECT e.employee_id WHERE e.user_id = /* user.userId */0 AND e.employee_id = /* employee.employeeId */0 AND e.join_date <= /* referenceDate + 1 */'2099/12/31' - /*%if @isNotBlank(employee.departmentId) */ + /*%if @isNotBlank(employee.departmentId) && (employee.departmentId > 100) */ /*%if employee.departmentId.startsWith("200") */  AND e.department_id = /* employee.departmentId + 1 */'dept' - /*%elseif employee.numberOfProjects >= 3 */ + /*%elseif (employee.numberOfProjects >= 3) */ AND pe.start_date <= CURRENT_DATE AND pe.end_date >= CURRENT_DATE /*%end*/ diff --git a/src/test/testData/sql/parser/SQLParser.txt b/src/test/testData/sql/parser/SQLParser.txt index f5cc1ada..6f1bf234 100644 --- a/src/test/testData/sql/parser/SQLParser.txt +++ b/src/test/testData/sql/parser/SQLParser.txt @@ -1,4 +1,4 @@ -SQL File(0,1275) +SQL File(0,1310) PsiElement(SqlTokenType.LINE_COMMENT)('-- Psi tree comparison test data for keywords, directives, bind variables, member accesses, and static property calls\n')(0,118) PsiElement(SqlTokenType.KEYWORD)('SELECT')(118,124) PsiWhiteSpace(' ')(124,125) @@ -171,278 +171,300 @@ SQL File(0,1275) PsiElement(SqlTokenType.*/)('*/')(597,599) PsiElement(SqlTokenType.STRING)(''2099/12/31'')(599,611) PsiWhiteSpace('\n ')(611,615) - SqlBlockCommentImpl(BLOCK_COMMENT)(615,658) + SqlBlockCommentImpl(BLOCK_COMMENT)(615,691) PsiElement(SqlTokenType./*)('/*')(615,617) - SqlElIfDirectiveImpl(EL_IF_DIRECTIVE)(617,655) + SqlElIfDirectiveImpl(EL_IF_DIRECTIVE)(617,688) PsiElement(SqlTokenType.%if)('%if')(617,620) PsiWhiteSpace(' ')(620,621) - SqlElFunctionCallExprImpl(EL_FUNCTION_CALL_EXPR)(621,655) - PsiElement(SqlTokenType.@)('@')(621,622) - SqlElIdExprImpl(EL_ID_EXPR)(622,632) - PsiElement(SqlTokenType.EL_IDENTIFIER)('isNotBlank')(622,632) - SqlElParametersImpl(EL_PARAMETERS)(632,655) - PsiElement(SqlTokenType.()('(')(632,633) - SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(633,654) - SqlElIdExprImpl(EL_ID_EXPR)(633,641) - PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(633,641) - PsiElement(SqlTokenType..)('.')(641,642) - SqlElIdExprImpl(EL_ID_EXPR)(642,654) - PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(642,654) - PsiElement(SqlTokenType.))(')')(654,655) - PsiWhiteSpace(' ')(655,656) - PsiElement(SqlTokenType.*/)('*/')(656,658) - PsiWhiteSpace('\n ')(658,662) - SqlBlockCommentImpl(BLOCK_COMMENT)(662,710) - PsiElement(SqlTokenType./*)('/*')(662,664) - SqlElIfDirectiveImpl(EL_IF_DIRECTIVE)(664,707) - PsiElement(SqlTokenType.%if)('%if')(664,667) - PsiWhiteSpace(' ')(667,668) - SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(668,707) - SqlElIdExprImpl(EL_ID_EXPR)(668,676) - PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(668,676) - PsiElement(SqlTokenType..)('.')(676,677) - SqlElIdExprImpl(EL_ID_EXPR)(677,689) - PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(677,689) - PsiElement(SqlTokenType..)('.')(689,690) - SqlElIdExprImpl(EL_ID_EXPR)(690,700) - PsiElement(SqlTokenType.EL_IDENTIFIER)('startsWith')(690,700) - SqlElParametersImpl(EL_PARAMETERS)(700,707) - PsiElement(SqlTokenType.()('(')(700,701) - SqlElPrimaryExprImpl(EL_PRIMARY_EXPR)(701,706) - PsiElement(SqlTokenType.EL_STRING)('"200"')(701,706) - PsiElement(SqlTokenType.))(')')(706,707) - PsiWhiteSpace(' ')(707,708) - PsiElement(SqlTokenType.*/)('*/')(708,710) - PsiElement(SqlTokenType.OTHER)(' ')(710,711) - PsiWhiteSpace('\n ')(711,715) - PsiElement(SqlTokenType.KEYWORD)('AND')(715,718) - PsiWhiteSpace(' ')(718,719) - PsiElement(SqlTokenType.WORD)('e')(719,720) - PsiElement(SqlTokenType..)('.')(720,721) - PsiElement(SqlTokenType.WORD)('department_id')(721,734) - PsiWhiteSpace(' ')(734,735) - PsiElement(SqlTokenType.OTHER)('=')(735,736) - PsiWhiteSpace(' ')(736,737) - SqlBlockCommentImpl(BLOCK_COMMENT)(737,769) - PsiElement(SqlTokenType./*)('/*')(737,739) - PsiWhiteSpace(' ')(739,740) - SqlElAddExprImpl(EL_ADD_EXPR)(740,766) - SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(740,761) - SqlElIdExprImpl(EL_ID_EXPR)(740,748) - PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(740,748) - PsiElement(SqlTokenType..)('.')(748,749) - SqlElIdExprImpl(EL_ID_EXPR)(749,761) - PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(749,761) - PsiWhiteSpace(' ')(761,762) - PsiElement(SqlTokenType.+)('+')(762,763) - PsiWhiteSpace(' ')(763,765) - SqlElPrimaryExprImpl(EL_PRIMARY_EXPR)(765,766) - PsiElement(SqlTokenType.EL_NUMBER)('1')(765,766) - PsiWhiteSpace(' ')(766,767) - PsiElement(SqlTokenType.*/)('*/')(767,769) - PsiElement(SqlTokenType.STRING)(''dept'')(769,775) - PsiWhiteSpace('\n ')(775,779) - SqlBlockCommentImpl(BLOCK_COMMENT)(779,822) - PsiElement(SqlTokenType./*)('/*')(779,781) - SqlElElseifDirectiveImpl(EL_ELSEIF_DIRECTIVE)(781,819) - PsiElement(SqlTokenType.%elseif)('%elseif')(781,788) - PsiWhiteSpace(' ')(788,789) - SqlElGeExprImpl(EL_GE_EXPR)(789,819) - SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(789,814) - SqlElIdExprImpl(EL_ID_EXPR)(789,797) - PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(789,797) - PsiElement(SqlTokenType..)('.')(797,798) - SqlElIdExprImpl(EL_ID_EXPR)(798,814) - PsiElement(SqlTokenType.EL_IDENTIFIER)('numberOfProjects')(798,814) - PsiWhiteSpace(' ')(814,815) - PsiElement(SqlTokenType.>=)('>=')(815,817) - PsiWhiteSpace(' ')(817,818) - SqlElPrimaryExprImpl(EL_PRIMARY_EXPR)(818,819) - PsiElement(SqlTokenType.EL_NUMBER)('3')(818,819) - PsiWhiteSpace(' ')(819,820) - PsiElement(SqlTokenType.*/)('*/')(820,822) - PsiWhiteSpace('\n ')(822,826) - PsiElement(SqlTokenType.KEYWORD)('AND')(826,829) - PsiWhiteSpace(' ')(829,830) - PsiElement(SqlTokenType.WORD)('pe')(830,832) - PsiElement(SqlTokenType..)('.')(832,833) - PsiElement(SqlTokenType.WORD)('start_date')(833,843) - PsiWhiteSpace(' ')(843,844) - PsiElement(SqlTokenType.<=)('<=')(844,846) - PsiWhiteSpace(' ')(846,847) - PsiElement(SqlTokenType.WORD)('CURRENT_DATE')(847,859) - PsiWhiteSpace('\n ')(859,863) - PsiElement(SqlTokenType.KEYWORD)('AND')(863,866) - PsiWhiteSpace(' ')(866,867) - PsiElement(SqlTokenType.WORD)('pe')(867,869) - PsiElement(SqlTokenType..)('.')(869,870) - PsiElement(SqlTokenType.WORD)('end_date')(870,878) + SqlElAndExprImpl(EL_AND_EXPR)(621,688) + SqlElFunctionCallExprImpl(EL_FUNCTION_CALL_EXPR)(621,655) + PsiElement(SqlTokenType.@)('@')(621,622) + SqlElIdExprImpl(EL_ID_EXPR)(622,632) + PsiElement(SqlTokenType.EL_IDENTIFIER)('isNotBlank')(622,632) + SqlElParametersImpl(EL_PARAMETERS)(632,655) + PsiElement(SqlTokenType.()('(')(632,633) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(633,654) + SqlElIdExprImpl(EL_ID_EXPR)(633,641) + PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(633,641) + PsiElement(SqlTokenType..)('.')(641,642) + SqlElIdExprImpl(EL_ID_EXPR)(642,654) + PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(642,654) + PsiElement(SqlTokenType.))(')')(654,655) + PsiWhiteSpace(' ')(655,656) + PsiElement(SqlTokenType.&&)('&&')(656,658) + PsiWhiteSpace(' ')(658,659) + SqlElTermExprImpl(EL_TERM_EXPR)(659,688) + PsiElement(SqlTokenType.()('(')(659,660) + SqlElGtExprImpl(EL_GT_EXPR)(660,687) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(660,681) + SqlElIdExprImpl(EL_ID_EXPR)(660,668) + PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(660,668) + PsiElement(SqlTokenType..)('.')(668,669) + SqlElIdExprImpl(EL_ID_EXPR)(669,681) + PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(669,681) + PsiWhiteSpace(' ')(681,682) + PsiElement(SqlTokenType.>)('>')(682,683) + PsiWhiteSpace(' ')(683,684) + SqlElPrimaryExprImpl(EL_PRIMARY_EXPR)(684,687) + PsiElement(SqlTokenType.EL_NUMBER)('100')(684,687) + PsiElement(SqlTokenType.))(')')(687,688) + PsiWhiteSpace(' ')(688,689) + PsiElement(SqlTokenType.*/)('*/')(689,691) + PsiWhiteSpace('\n ')(691,695) + SqlBlockCommentImpl(BLOCK_COMMENT)(695,743) + PsiElement(SqlTokenType./*)('/*')(695,697) + SqlElIfDirectiveImpl(EL_IF_DIRECTIVE)(697,740) + PsiElement(SqlTokenType.%if)('%if')(697,700) + PsiWhiteSpace(' ')(700,701) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(701,740) + SqlElIdExprImpl(EL_ID_EXPR)(701,709) + PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(701,709) + PsiElement(SqlTokenType..)('.')(709,710) + SqlElIdExprImpl(EL_ID_EXPR)(710,722) + PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(710,722) + PsiElement(SqlTokenType..)('.')(722,723) + SqlElIdExprImpl(EL_ID_EXPR)(723,733) + PsiElement(SqlTokenType.EL_IDENTIFIER)('startsWith')(723,733) + SqlElParametersImpl(EL_PARAMETERS)(733,740) + PsiElement(SqlTokenType.()('(')(733,734) + SqlElPrimaryExprImpl(EL_PRIMARY_EXPR)(734,739) + PsiElement(SqlTokenType.EL_STRING)('"200"')(734,739) + PsiElement(SqlTokenType.))(')')(739,740) + PsiWhiteSpace(' ')(740,741) + PsiElement(SqlTokenType.*/)('*/')(741,743) + PsiElement(SqlTokenType.OTHER)(' ')(743,744) + PsiWhiteSpace('\n ')(744,748) + PsiElement(SqlTokenType.KEYWORD)('AND')(748,751) + PsiWhiteSpace(' ')(751,752) + PsiElement(SqlTokenType.WORD)('e')(752,753) + PsiElement(SqlTokenType..)('.')(753,754) + PsiElement(SqlTokenType.WORD)('department_id')(754,767) + PsiWhiteSpace(' ')(767,768) + PsiElement(SqlTokenType.OTHER)('=')(768,769) + PsiWhiteSpace(' ')(769,770) + SqlBlockCommentImpl(BLOCK_COMMENT)(770,802) + PsiElement(SqlTokenType./*)('/*')(770,772) + PsiWhiteSpace(' ')(772,773) + SqlElAddExprImpl(EL_ADD_EXPR)(773,799) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(773,794) + SqlElIdExprImpl(EL_ID_EXPR)(773,781) + PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(773,781) + PsiElement(SqlTokenType..)('.')(781,782) + SqlElIdExprImpl(EL_ID_EXPR)(782,794) + PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(782,794) + PsiWhiteSpace(' ')(794,795) + PsiElement(SqlTokenType.+)('+')(795,796) + PsiWhiteSpace(' ')(796,798) + SqlElPrimaryExprImpl(EL_PRIMARY_EXPR)(798,799) + PsiElement(SqlTokenType.EL_NUMBER)('1')(798,799) + PsiWhiteSpace(' ')(799,800) + PsiElement(SqlTokenType.*/)('*/')(800,802) + PsiElement(SqlTokenType.STRING)(''dept'')(802,808) + PsiWhiteSpace('\n ')(808,812) + SqlBlockCommentImpl(BLOCK_COMMENT)(812,857) + PsiElement(SqlTokenType./*)('/*')(812,814) + SqlElElseifDirectiveImpl(EL_ELSEIF_DIRECTIVE)(814,854) + PsiElement(SqlTokenType.%elseif)('%elseif')(814,821) + PsiWhiteSpace(' ')(821,822) + SqlElTermExprImpl(EL_TERM_EXPR)(822,854) + PsiElement(SqlTokenType.()('(')(822,823) + SqlElGeExprImpl(EL_GE_EXPR)(823,853) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(823,848) + SqlElIdExprImpl(EL_ID_EXPR)(823,831) + PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(823,831) + PsiElement(SqlTokenType..)('.')(831,832) + SqlElIdExprImpl(EL_ID_EXPR)(832,848) + PsiElement(SqlTokenType.EL_IDENTIFIER)('numberOfProjects')(832,848) + PsiWhiteSpace(' ')(848,849) + PsiElement(SqlTokenType.>=)('>=')(849,851) + PsiWhiteSpace(' ')(851,852) + SqlElPrimaryExprImpl(EL_PRIMARY_EXPR)(852,853) + PsiElement(SqlTokenType.EL_NUMBER)('3')(852,853) + PsiElement(SqlTokenType.))(')')(853,854) + PsiWhiteSpace(' ')(854,855) + PsiElement(SqlTokenType.*/)('*/')(855,857) + PsiWhiteSpace('\n ')(857,861) + PsiElement(SqlTokenType.KEYWORD)('AND')(861,864) + PsiWhiteSpace(' ')(864,865) + PsiElement(SqlTokenType.WORD)('pe')(865,867) + PsiElement(SqlTokenType..)('.')(867,868) + PsiElement(SqlTokenType.WORD)('start_date')(868,878) PsiWhiteSpace(' ')(878,879) - PsiElement(SqlTokenType.>=)('>=')(879,881) + PsiElement(SqlTokenType.<=)('<=')(879,881) PsiWhiteSpace(' ')(881,882) PsiElement(SqlTokenType.WORD)('CURRENT_DATE')(882,894) PsiWhiteSpace('\n ')(894,898) - SqlBlockCommentImpl(BLOCK_COMMENT)(898,906) - PsiElement(SqlTokenType./*)('/*')(898,900) - PsiElement(SqlTokenType.%end)('%end')(900,904) - PsiElement(SqlTokenType.*/)('*/')(904,906) - PsiWhiteSpace('\n ')(906,910) - SqlBlockCommentImpl(BLOCK_COMMENT)(910,949) - PsiElement(SqlTokenType./*)('/*')(910,912) - SqlElForDirectiveImpl(EL_FOR_DIRECTIVE)(912,946) - PsiElement(SqlTokenType.%for)('%for')(912,916) - PsiWhiteSpace(' ')(916,917) - SqlElIdExprImpl(EL_ID_EXPR)(917,922) - PsiElement(SqlTokenType.EL_IDENTIFIER)('child')(917,922) - PsiWhiteSpace(' ')(922,923) - PsiElement(SqlTokenType.:)(':')(923,924) - PsiWhiteSpace(' ')(924,925) - SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(925,946) - SqlElIdExprImpl(EL_ID_EXPR)(925,933) - PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(925,933) - PsiElement(SqlTokenType..)('.')(933,934) - SqlElIdExprImpl(EL_ID_EXPR)(934,946) - PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(934,946) - PsiWhiteSpace(' ')(946,947) - PsiElement(SqlTokenType.*/)('*/')(947,949) - PsiWhiteSpace('\n ')(949,953) - SqlBlockCommentImpl(BLOCK_COMMENT)(953,977) - PsiElement(SqlTokenType./*)('/*')(953,955) - SqlElIfDirectiveImpl(EL_IF_DIRECTIVE)(955,974) - PsiElement(SqlTokenType.%if)('%if')(955,958) - PsiWhiteSpace(' ')(958,960) - SqlElIdExprImpl(EL_ID_EXPR)(960,974) - PsiElement(SqlTokenType.EL_IDENTIFIER)('child_has_next')(960,974) - PsiWhiteSpace(' ')(974,975) - PsiElement(SqlTokenType.*/)('*/')(975,977) - PsiWhiteSpace('\n ')(977,981) - PsiElement(SqlTokenType.KEYWORD)('AND')(981,984) - PsiWhiteSpace(' ')(984,985) - PsiElement(SqlTokenType.WORD)('pe')(985,987) - PsiElement(SqlTokenType..)('.')(987,988) - PsiElement(SqlTokenType.WORD)('parent_project')(988,1002) - PsiWhiteSpace(' ')(1002,1003) - PsiElement(SqlTokenType.OTHER)('=')(1003,1004) - PsiWhiteSpace(' ')(1004,1005) - SqlBlockCommentImpl(BLOCK_COMMENT)(1005,1026) - PsiElement(SqlTokenType./*)('/*')(1005,1007) - PsiWhiteSpace(' ')(1007,1008) - SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(1008,1023) - SqlElIdExprImpl(EL_ID_EXPR)(1008,1013) - PsiElement(SqlTokenType.EL_IDENTIFIER)('child')(1008,1013) - PsiElement(SqlTokenType..)('.')(1013,1014) - SqlElIdExprImpl(EL_ID_EXPR)(1014,1023) - PsiElement(SqlTokenType.EL_IDENTIFIER)('projectId')(1014,1023) - PsiWhiteSpace(' ')(1023,1024) - PsiElement(SqlTokenType.*/)('*/')(1024,1026) - PsiElement(SqlTokenType.NUMBER)('0')(1026,1027) - PsiWhiteSpace('\n ')(1027,1031) - SqlBlockCommentImpl(BLOCK_COMMENT)(1031,1057) - PsiElement(SqlTokenType./*)('/*')(1031,1033) - SqlElForDirectiveImpl(EL_FOR_DIRECTIVE)(1033,1054) - PsiElement(SqlTokenType.%for)('%for')(1033,1037) - PsiWhiteSpace(' ')(1037,1038) - SqlElIdExprImpl(EL_ID_EXPR)(1038,1039) - PsiElement(SqlTokenType.EL_IDENTIFIER)('p')(1038,1039) - PsiWhiteSpace(' ')(1039,1040) - PsiElement(SqlTokenType.:)(':')(1040,1041) - PsiWhiteSpace(' ')(1041,1042) - SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(1042,1054) - SqlElIdExprImpl(EL_ID_EXPR)(1042,1047) - PsiElement(SqlTokenType.EL_IDENTIFIER)('child')(1042,1047) - PsiElement(SqlTokenType..)('.')(1047,1048) - SqlElIdExprImpl(EL_ID_EXPR)(1048,1054) - PsiElement(SqlTokenType.EL_IDENTIFIER)('member')(1048,1054) - PsiWhiteSpace(' ')(1054,1055) - PsiElement(SqlTokenType.*/)('*/')(1055,1057) - PsiWhiteSpace('\n ')(1057,1061) - PsiElement(SqlTokenType.KEYWORD)('AND')(1061,1064) - PsiWhiteSpace(' ')(1064,1065) - PsiElement(SqlTokenType.WORD)('pe')(1065,1067) - PsiElement(SqlTokenType..)('.')(1067,1068) - PsiElement(SqlTokenType.WORD)('type')(1068,1072) - PsiWhiteSpace(' ')(1072,1073) - PsiElement(SqlTokenType.OTHER)('=')(1073,1074) - PsiWhiteSpace(' ')(1074,1075) - SqlBlockCommentImpl(BLOCK_COMMENT)(1075,1125) - PsiElement(SqlTokenType./*)('/*')(1075,1077) - PsiWhiteSpace(' ')(1077,1078) - SqlElStaticFieldAccessExprImpl(EL_STATIC_FIELD_ACCESS_EXPR)(1078,1122) - PsiElement(SqlTokenType.@)('@')(1078,1079) - SqlElClassImpl(EL_CLASS)(1079,1104) - SqlElIdExprImpl(EL_ID_EXPR)(1079,1086) - PsiElement(SqlTokenType.EL_IDENTIFIER)('example')(1079,1086) - PsiElement(SqlTokenType..)('.')(1086,1087) - SqlElIdExprImpl(EL_ID_EXPR)(1087,1093) - PsiElement(SqlTokenType.EL_IDENTIFIER)('entity')(1087,1093) - PsiElement(SqlTokenType..)('.')(1093,1094) - SqlElIdExprImpl(EL_ID_EXPR)(1094,1104) - PsiElement(SqlTokenType.EL_IDENTIFIER)('StaticType')(1094,1104) - PsiElement(SqlTokenType.@)('@')(1104,1105) - SqlElIdExprImpl(EL_ID_EXPR)(1105,1111) - PsiElement(SqlTokenType.EL_IDENTIFIER)('PARAM1')(1105,1111) - PsiElement(SqlTokenType..)('.')(1111,1112) - SqlElIdExprImpl(EL_ID_EXPR)(1112,1120) - PsiElement(SqlTokenType.EL_IDENTIFIER)('getValue')(1112,1120) - SqlElParametersImpl(EL_PARAMETERS)(1120,1122) - PsiElement(SqlTokenType.()('(')(1120,1121) - PsiElement(SqlTokenType.))(')')(1121,1122) - PsiWhiteSpace(' ')(1122,1123) - PsiElement(SqlTokenType.*/)('*/')(1123,1125) - PsiElement(SqlTokenType.STRING)(''0'')(1125,1128) - PsiWhiteSpace('\n ')(1128,1130) - SqlBlockCommentImpl(BLOCK_COMMENT)(1130,1139) - PsiElement(SqlTokenType./*)('/*')(1130,1132) - PsiElement(SqlTokenType.%end)('%end')(1132,1136) - PsiWhiteSpace(' ')(1136,1137) - PsiElement(SqlTokenType.*/)('*/')(1137,1139) - PsiWhiteSpace('\n ')(1139,1141) - SqlBlockCommentImpl(BLOCK_COMMENT)(1141,1150) - PsiElement(SqlTokenType./*)('/*')(1141,1143) - PsiElement(SqlTokenType.%end)('%end')(1143,1147) - PsiWhiteSpace(' ')(1147,1148) - PsiElement(SqlTokenType.*/)('*/')(1148,1150) - PsiWhiteSpace('\n ')(1150,1152) - SqlBlockCommentImpl(BLOCK_COMMENT)(1152,1161) - PsiElement(SqlTokenType./*)('/*')(1152,1154) - PsiElement(SqlTokenType.%end)('%end')(1154,1158) - PsiWhiteSpace(' ')(1158,1159) - PsiElement(SqlTokenType.*/)('*/')(1159,1161) - PsiWhiteSpace('\n ')(1161,1163) - SqlBlockCommentImpl(BLOCK_COMMENT)(1163,1172) - PsiElement(SqlTokenType./*)('/*')(1163,1165) - PsiElement(SqlTokenType.%end)('%end')(1165,1169) - PsiWhiteSpace(' ')(1169,1170) - PsiElement(SqlTokenType.*/)('*/')(1170,1172) - PsiWhiteSpace('\n ')(1172,1174) - PsiElement(SqlTokenType.KEYWORD)('GROUP')(1174,1179) - PsiWhiteSpace(' ')(1179,1180) - PsiElement(SqlTokenType.KEYWORD)('BY')(1180,1182) - PsiWhiteSpace(' ')(1182,1183) - PsiElement(SqlTokenType.WORD)('e')(1183,1184) - PsiElement(SqlTokenType..)('.')(1184,1185) - PsiElement(SqlTokenType.WORD)('employee_id')(1185,1196) - PsiWhiteSpace('\n ')(1196,1204) - PsiElement(SqlTokenType.,)(',')(1204,1205) - PsiWhiteSpace(' ')(1205,1206) - PsiElement(SqlTokenType.WORD)('u')(1206,1207) - PsiElement(SqlTokenType..)('.')(1207,1208) - PsiElement(SqlTokenType.WORD)('user_id')(1208,1215) - PsiWhiteSpace('\n ')(1215,1223) - PsiElement(SqlTokenType.,)(',')(1223,1224) - PsiWhiteSpace(' ')(1224,1225) - PsiElement(SqlTokenType.WORD)('u')(1225,1226) - PsiElement(SqlTokenType..)('.')(1226,1227) - PsiElement(SqlTokenType.WORD)('user_name')(1227,1236) - PsiWhiteSpace('\n ')(1236,1244) - PsiElement(SqlTokenType.,)(',')(1244,1245) - PsiWhiteSpace(' ')(1245,1246) - PsiElement(SqlTokenType.WORD)('u')(1246,1247) - PsiElement(SqlTokenType..)('.')(1247,1248) - PsiElement(SqlTokenType.WORD)('email')(1248,1253) - PsiWhiteSpace('\n ')(1253,1261) - PsiElement(SqlTokenType.,)(',')(1261,1262) - PsiWhiteSpace(' ')(1262,1263) - PsiElement(SqlTokenType.WORD)('e')(1263,1264) - PsiElement(SqlTokenType..)('.')(1264,1265) - PsiElement(SqlTokenType.WORD)('department')(1265,1275) + PsiElement(SqlTokenType.KEYWORD)('AND')(898,901) + PsiWhiteSpace(' ')(901,902) + PsiElement(SqlTokenType.WORD)('pe')(902,904) + PsiElement(SqlTokenType..)('.')(904,905) + PsiElement(SqlTokenType.WORD)('end_date')(905,913) + PsiWhiteSpace(' ')(913,914) + PsiElement(SqlTokenType.>=)('>=')(914,916) + PsiWhiteSpace(' ')(916,917) + PsiElement(SqlTokenType.WORD)('CURRENT_DATE')(917,929) + PsiWhiteSpace('\n ')(929,933) + SqlBlockCommentImpl(BLOCK_COMMENT)(933,941) + PsiElement(SqlTokenType./*)('/*')(933,935) + PsiElement(SqlTokenType.%end)('%end')(935,939) + PsiElement(SqlTokenType.*/)('*/')(939,941) + PsiWhiteSpace('\n ')(941,945) + SqlBlockCommentImpl(BLOCK_COMMENT)(945,984) + PsiElement(SqlTokenType./*)('/*')(945,947) + SqlElForDirectiveImpl(EL_FOR_DIRECTIVE)(947,981) + PsiElement(SqlTokenType.%for)('%for')(947,951) + PsiWhiteSpace(' ')(951,952) + SqlElIdExprImpl(EL_ID_EXPR)(952,957) + PsiElement(SqlTokenType.EL_IDENTIFIER)('child')(952,957) + PsiWhiteSpace(' ')(957,958) + PsiElement(SqlTokenType.:)(':')(958,959) + PsiWhiteSpace(' ')(959,960) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(960,981) + SqlElIdExprImpl(EL_ID_EXPR)(960,968) + PsiElement(SqlTokenType.EL_IDENTIFIER)('employee')(960,968) + PsiElement(SqlTokenType..)('.')(968,969) + SqlElIdExprImpl(EL_ID_EXPR)(969,981) + PsiElement(SqlTokenType.EL_IDENTIFIER)('departmentId')(969,981) + PsiWhiteSpace(' ')(981,982) + PsiElement(SqlTokenType.*/)('*/')(982,984) + PsiWhiteSpace('\n ')(984,988) + SqlBlockCommentImpl(BLOCK_COMMENT)(988,1012) + PsiElement(SqlTokenType./*)('/*')(988,990) + SqlElIfDirectiveImpl(EL_IF_DIRECTIVE)(990,1009) + PsiElement(SqlTokenType.%if)('%if')(990,993) + PsiWhiteSpace(' ')(993,995) + SqlElIdExprImpl(EL_ID_EXPR)(995,1009) + PsiElement(SqlTokenType.EL_IDENTIFIER)('child_has_next')(995,1009) + PsiWhiteSpace(' ')(1009,1010) + PsiElement(SqlTokenType.*/)('*/')(1010,1012) + PsiWhiteSpace('\n ')(1012,1016) + PsiElement(SqlTokenType.KEYWORD)('AND')(1016,1019) + PsiWhiteSpace(' ')(1019,1020) + PsiElement(SqlTokenType.WORD)('pe')(1020,1022) + PsiElement(SqlTokenType..)('.')(1022,1023) + PsiElement(SqlTokenType.WORD)('parent_project')(1023,1037) + PsiWhiteSpace(' ')(1037,1038) + PsiElement(SqlTokenType.OTHER)('=')(1038,1039) + PsiWhiteSpace(' ')(1039,1040) + SqlBlockCommentImpl(BLOCK_COMMENT)(1040,1061) + PsiElement(SqlTokenType./*)('/*')(1040,1042) + PsiWhiteSpace(' ')(1042,1043) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(1043,1058) + SqlElIdExprImpl(EL_ID_EXPR)(1043,1048) + PsiElement(SqlTokenType.EL_IDENTIFIER)('child')(1043,1048) + PsiElement(SqlTokenType..)('.')(1048,1049) + SqlElIdExprImpl(EL_ID_EXPR)(1049,1058) + PsiElement(SqlTokenType.EL_IDENTIFIER)('projectId')(1049,1058) + PsiWhiteSpace(' ')(1058,1059) + PsiElement(SqlTokenType.*/)('*/')(1059,1061) + PsiElement(SqlTokenType.NUMBER)('0')(1061,1062) + PsiWhiteSpace('\n ')(1062,1066) + SqlBlockCommentImpl(BLOCK_COMMENT)(1066,1092) + PsiElement(SqlTokenType./*)('/*')(1066,1068) + SqlElForDirectiveImpl(EL_FOR_DIRECTIVE)(1068,1089) + PsiElement(SqlTokenType.%for)('%for')(1068,1072) + PsiWhiteSpace(' ')(1072,1073) + SqlElIdExprImpl(EL_ID_EXPR)(1073,1074) + PsiElement(SqlTokenType.EL_IDENTIFIER)('p')(1073,1074) + PsiWhiteSpace(' ')(1074,1075) + PsiElement(SqlTokenType.:)(':')(1075,1076) + PsiWhiteSpace(' ')(1076,1077) + SqlElFieldAccessExprImpl(EL_FIELD_ACCESS_EXPR)(1077,1089) + SqlElIdExprImpl(EL_ID_EXPR)(1077,1082) + PsiElement(SqlTokenType.EL_IDENTIFIER)('child')(1077,1082) + PsiElement(SqlTokenType..)('.')(1082,1083) + SqlElIdExprImpl(EL_ID_EXPR)(1083,1089) + PsiElement(SqlTokenType.EL_IDENTIFIER)('member')(1083,1089) + PsiWhiteSpace(' ')(1089,1090) + PsiElement(SqlTokenType.*/)('*/')(1090,1092) + PsiWhiteSpace('\n ')(1092,1096) + PsiElement(SqlTokenType.KEYWORD)('AND')(1096,1099) + PsiWhiteSpace(' ')(1099,1100) + PsiElement(SqlTokenType.WORD)('pe')(1100,1102) + PsiElement(SqlTokenType..)('.')(1102,1103) + PsiElement(SqlTokenType.WORD)('type')(1103,1107) + PsiWhiteSpace(' ')(1107,1108) + PsiElement(SqlTokenType.OTHER)('=')(1108,1109) + PsiWhiteSpace(' ')(1109,1110) + SqlBlockCommentImpl(BLOCK_COMMENT)(1110,1160) + PsiElement(SqlTokenType./*)('/*')(1110,1112) + PsiWhiteSpace(' ')(1112,1113) + SqlElStaticFieldAccessExprImpl(EL_STATIC_FIELD_ACCESS_EXPR)(1113,1157) + PsiElement(SqlTokenType.@)('@')(1113,1114) + SqlElClassImpl(EL_CLASS)(1114,1139) + SqlElIdExprImpl(EL_ID_EXPR)(1114,1121) + PsiElement(SqlTokenType.EL_IDENTIFIER)('example')(1114,1121) + PsiElement(SqlTokenType..)('.')(1121,1122) + SqlElIdExprImpl(EL_ID_EXPR)(1122,1128) + PsiElement(SqlTokenType.EL_IDENTIFIER)('entity')(1122,1128) + PsiElement(SqlTokenType..)('.')(1128,1129) + SqlElIdExprImpl(EL_ID_EXPR)(1129,1139) + PsiElement(SqlTokenType.EL_IDENTIFIER)('StaticType')(1129,1139) + PsiElement(SqlTokenType.@)('@')(1139,1140) + SqlElIdExprImpl(EL_ID_EXPR)(1140,1146) + PsiElement(SqlTokenType.EL_IDENTIFIER)('PARAM1')(1140,1146) + PsiElement(SqlTokenType..)('.')(1146,1147) + SqlElIdExprImpl(EL_ID_EXPR)(1147,1155) + PsiElement(SqlTokenType.EL_IDENTIFIER)('getValue')(1147,1155) + SqlElParametersImpl(EL_PARAMETERS)(1155,1157) + PsiElement(SqlTokenType.()('(')(1155,1156) + PsiElement(SqlTokenType.))(')')(1156,1157) + PsiWhiteSpace(' ')(1157,1158) + PsiElement(SqlTokenType.*/)('*/')(1158,1160) + PsiElement(SqlTokenType.STRING)(''0'')(1160,1163) + PsiWhiteSpace('\n ')(1163,1165) + SqlBlockCommentImpl(BLOCK_COMMENT)(1165,1174) + PsiElement(SqlTokenType./*)('/*')(1165,1167) + PsiElement(SqlTokenType.%end)('%end')(1167,1171) + PsiWhiteSpace(' ')(1171,1172) + PsiElement(SqlTokenType.*/)('*/')(1172,1174) + PsiWhiteSpace('\n ')(1174,1176) + SqlBlockCommentImpl(BLOCK_COMMENT)(1176,1185) + PsiElement(SqlTokenType./*)('/*')(1176,1178) + PsiElement(SqlTokenType.%end)('%end')(1178,1182) + PsiWhiteSpace(' ')(1182,1183) + PsiElement(SqlTokenType.*/)('*/')(1183,1185) + PsiWhiteSpace('\n ')(1185,1187) + SqlBlockCommentImpl(BLOCK_COMMENT)(1187,1196) + PsiElement(SqlTokenType./*)('/*')(1187,1189) + PsiElement(SqlTokenType.%end)('%end')(1189,1193) + PsiWhiteSpace(' ')(1193,1194) + PsiElement(SqlTokenType.*/)('*/')(1194,1196) + PsiWhiteSpace('\n ')(1196,1198) + SqlBlockCommentImpl(BLOCK_COMMENT)(1198,1207) + PsiElement(SqlTokenType./*)('/*')(1198,1200) + PsiElement(SqlTokenType.%end)('%end')(1200,1204) + PsiWhiteSpace(' ')(1204,1205) + PsiElement(SqlTokenType.*/)('*/')(1205,1207) + PsiWhiteSpace('\n ')(1207,1209) + PsiElement(SqlTokenType.KEYWORD)('GROUP')(1209,1214) + PsiWhiteSpace(' ')(1214,1215) + PsiElement(SqlTokenType.KEYWORD)('BY')(1215,1217) + PsiWhiteSpace(' ')(1217,1218) + PsiElement(SqlTokenType.WORD)('e')(1218,1219) + PsiElement(SqlTokenType..)('.')(1219,1220) + PsiElement(SqlTokenType.WORD)('employee_id')(1220,1231) + PsiWhiteSpace('\n ')(1231,1239) + PsiElement(SqlTokenType.,)(',')(1239,1240) + PsiWhiteSpace(' ')(1240,1241) + PsiElement(SqlTokenType.WORD)('u')(1241,1242) + PsiElement(SqlTokenType..)('.')(1242,1243) + PsiElement(SqlTokenType.WORD)('user_id')(1243,1250) + PsiWhiteSpace('\n ')(1250,1258) + PsiElement(SqlTokenType.,)(',')(1258,1259) + PsiWhiteSpace(' ')(1259,1260) + PsiElement(SqlTokenType.WORD)('u')(1260,1261) + PsiElement(SqlTokenType..)('.')(1261,1262) + PsiElement(SqlTokenType.WORD)('user_name')(1262,1271) + PsiWhiteSpace('\n ')(1271,1279) + PsiElement(SqlTokenType.,)(',')(1279,1280) + PsiWhiteSpace(' ')(1280,1281) + PsiElement(SqlTokenType.WORD)('u')(1281,1282) + PsiElement(SqlTokenType..)('.')(1282,1283) + PsiElement(SqlTokenType.WORD)('email')(1283,1288) + PsiWhiteSpace('\n ')(1288,1296) + PsiElement(SqlTokenType.,)(',')(1296,1297) + PsiWhiteSpace(' ')(1297,1298) + PsiElement(SqlTokenType.WORD)('e')(1298,1299) + PsiElement(SqlTokenType..)('.')(1299,1300) + PsiElement(SqlTokenType.WORD)('department')(1300,1310) diff --git a/src/test/testData/src/main/resources/META-INF/doma/example/dao/EmployeeSummaryDao/bindVariableInFunctionParameters.sql b/src/test/testData/src/main/resources/META-INF/doma/example/dao/EmployeeSummaryDao/bindVariableInFunctionParameters.sql index 4a22496e..214906b3 100644 --- a/src/test/testData/src/main/resources/META-INF/doma/example/dao/EmployeeSummaryDao/bindVariableInFunctionParameters.sql +++ b/src/test/testData/src/main/resources/META-INF/doma/example/dao/EmployeeSummaryDao/bindVariableInFunctionParameters.sql @@ -6,6 +6,7 @@ SELECT FROM user u WHERE p.employee_id = /* employee.employeeParam(employee.dist, employee.employeeId) */0 AND p.base_rank = /* employee.employeeParam(user.userId, count) */0 -AND p.employee_id = /* employee.employeeParam(employee.dist, rank) */0 +/*%if employee != null && (employee.employeeId > 100 || employee.employeeId < 50) */ + AND p.employee_id = /* employee.employeeParam(employee.dist, rank) */0 OR flag = /* @authUser() */false /*%end */ \ No newline at end of file