Skip to content

Commit 7b615f8

Browse files
committed
Remove functionName w/ qualifiedName
1 parent 445be01 commit 7b615f8

File tree

3 files changed

+16
-26
lines changed

3 files changed

+16
-26
lines changed

partiql-lang/src/main/kotlin/org/partiql/lang/syntax/impl/PartiQLPigVisitor.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1326,7 +1326,7 @@ internal class PartiQLPigVisitor(
13261326
}
13271327

13281328
override fun visitFunctionCall(ctx: PartiQLParser.FunctionCallContext) = PartiqlAst.build {
1329-
val nameCtx = ctx.functionName()
1329+
val nameCtx = ctx.qualifiedName()
13301330
val name = if (nameCtx.qualifier.isNotEmpty()) {
13311331
error("Legacy AST does not support qualified function names")
13321332
} else {

partiql-parser/src/main/antlr/PartiQL.g4

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -763,12 +763,7 @@ dateFunction
763763

764764
// SQL-99 10.4 — <routine invocation> ::= <routine name> <SQL argument list>
765765
functionCall
766-
: functionName PAREN_LEFT ( expr ( COMMA expr )* )? PAREN_RIGHT
767-
;
768-
769-
// SQL-99 10.4 — <routine name> ::= [ <schema name> <period> ] <qualified identifier>
770-
functionName
771-
: (qualifier+=symbolPrimitive PERIOD)* name=symbolPrimitive
766+
: qualifiedName PAREN_LEFT ( expr ( COMMA expr )* )? PAREN_RIGHT
772767
;
773768

774769
pathStep

partiql-parser/src/main/kotlin/org/partiql/parser/internal/PartiQLParserDefault.kt

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1857,37 +1857,32 @@ internal class PartiQLParserDefault : PartiQLParser {
18571857

18581858
override fun visitFunctionCall(ctx: GeneratedParser.FunctionCallContext) = translate(ctx) {
18591859
val args = visitOrEmpty<Expr>(ctx.expr())
1860-
when (val funcName = ctx.functionName()) {
1861-
is GeneratedParser.FunctionNameContext -> {
1860+
when (val funcName = ctx.qualifiedName()) {
1861+
is GeneratedParser.QualifiedNameContext -> {
18621862
when (funcName.name.start.type) {
18631863
GeneratedParser.MOD -> exprBinary(Expr.Binary.Op.MODULO, args[0], args[1])
1864+
GeneratedParser.CHARACTER_LENGTH, GeneratedParser.CHAR_LENGTH -> {
1865+
val path = ctx.qualifiedName().qualifier.map { visitSymbolPrimitive(it) }
1866+
val name = identifierSymbol("char_length", Identifier.CaseSensitivity.INSENSITIVE)
1867+
if (path.isEmpty()) {
1868+
exprCall(name, args)
1869+
} else {
1870+
val root = path.first()
1871+
val steps = path.drop(1) + listOf(name)
1872+
exprCall(identifierQualified(root, steps), args)
1873+
}
1874+
}
18641875
else -> visitNonReservedFunctionCall(ctx, args)
18651876
}
18661877
}
18671878
else -> visitNonReservedFunctionCall(ctx, args)
18681879
}
18691880
}
18701881
private fun visitNonReservedFunctionCall(ctx: GeneratedParser.FunctionCallContext, args: List<Expr>): Expr.Call {
1871-
val function = visit(ctx.functionName()) as Identifier
1882+
val function = visitQualifiedName(ctx.qualifiedName())
18721883
return exprCall(function, args)
18731884
}
18741885

1875-
override fun visitFunctionName(ctx: GeneratedParser.FunctionNameContext): Identifier {
1876-
val path = ctx.qualifier.map { visitSymbolPrimitive(it) }
1877-
val name = when (ctx.name.start.type) {
1878-
GeneratedParser.CHARACTER_LENGTH, GeneratedParser.CHAR_LENGTH ->
1879-
identifierSymbol("char_length", Identifier.CaseSensitivity.INSENSITIVE)
1880-
else -> visitSymbolPrimitive(ctx.name)
1881-
}
1882-
return if (path.isEmpty()) {
1883-
name
1884-
} else {
1885-
val root = path.first()
1886-
val steps = path.drop(1) + listOf(name)
1887-
identifierQualified(root, steps)
1888-
}
1889-
}
1890-
18911886
/**
18921887
*
18931888
* FUNCTIONS WITH SPECIAL FORMS

0 commit comments

Comments
 (0)