graphql-java-tools
graphql-java-tools copied to clipboard
Input type cannot be recursive from version 6.1
stack overflow!!
my example: WhereTree nested recursive ;
enum LJ_TYPE { AND, OR, NOT, DSELF }
enum OPERATOR { EQ,NE,GE,LE,GT,LT,BTW,IN,LK,
EMPTY,NULL,EXI,NEXI,TRUE,FALSE,NNULL,NEMPTY }
input WhereLeaf { s:String, o:OPERATOR, l:ExpressItem, r:ExpressItem,
sv:String, sa:[String], dt:String, dv:Float, lv:Int,
dta:[String], da:[Float], la:[Int]
}
input WhereTree { lj:LJ_TYPE, a:WhereLeaf, as:[WhereLeaf],
w:WhereTree, ws:[WhereTree], sup:WhereTree
}
input ExpressItem {
y:String, l:ExpressItem, r:ExpressItem, s:String,
sub:SubSelect, cwt:[CaseExpression], a:[ExpressItem],
sv:String, lv:Int, dv:Float, dt:String,
bv:Boolean, len:Int
}
input SubSelect {
s:String, e:ExpressItem, from:String,
where: WhereTree, grp:[ExpressItem], hav:WhereTree
}
input CaseExpression {
w:ExpressItem, b: WhereTree, t:ExpressItem
}
extend type Query {
findAllEQPsFilter_delete(where: WhereTree, offset:Int, first:Int, orderBy:String, asc:Boolean): [EQP]!
}
WhereTree can not use NOW!
Probably fixed with https://github.com/graphql-java-kickstart/graphql-java-tools/pull/414
A simplified version of this works:
class TempTest {
@Test
fun test() {
val schema = SchemaParser.newParser()
.resolvers(Query())
.schemaString(
"""
input WhereLeaf {
l: ExpressItem
}
input WhereTree {
a:WhereLeaf,
as:[WhereLeaf]
}
input ExpressItem {
l:ExpressItem,
sub:SubSelect,
cwt:[CaseExpression],
a:[ExpressItem]
}
input SubSelect {
e:ExpressItem,
where: WhereTree,
grp:[ExpressItem],
hav:WhereTree
}
input CaseExpression {
w:ExpressItem, b: WhereTree
}
type Query {
find(where: WhereTree): Int
}
""")
.build()
.makeExecutableSchema()
assertNotNull(schema)
}
private class Query : GraphQLQueryResolver { fun find(where: WhereTree): Int = 0 }
data class WhereTree(val a: WhereLeaf, val `as`: List<WhereLeaf>)
data class WhereLeaf(val l: ExpressItem)
data class ExpressItem(val l: ExpressItem?, val sub: SubSelect, val cwt: List<CaseExpression>, val a: List<ExpressItem>)
data class SubSelect(val e: ExpressItem, val where: WhereTree, val grp: List<ExpressItem>, val hav: WhereTree)
data class CaseExpression(val w: ExpressItem, val b: WhereTree)
}