graphql-java-tools icon indicating copy to clipboard operation
graphql-java-tools copied to clipboard

Input type cannot be recursive from version 6.1

Open heerzhang opened this issue 5 years ago • 1 comments

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!

heerzhang avatar Oct 16 '20 05:10 heerzhang

Probably fixed with https://github.com/graphql-java-kickstart/graphql-java-tools/pull/414

KammererTob avatar May 26 '21 14:05 KammererTob

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

oryan-block avatar Jan 31 '24 20:01 oryan-block