Skip to content

Commit a89303e

Browse files
committed
Handle special characters in schema and type queries. (#4937)
Special predicate names (i.e using Chinese characters) need to be wrapped around "<" and ">" brackets but the lexer does not currently support that. This PR adds support for that syntax. Fixes #4933
1 parent 0a0d273 commit a89303e

2 files changed

Lines changed: 30 additions & 0 deletions

File tree

gql/parser_test.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1801,6 +1801,34 @@ func TestParseSchemaTypeMulti(t *testing.T) {
18011801
require.Equal(t, len(res.Schema.Fields), 0)
18021802
}
18031803

1804+
func TestParseSchemaSpecialChars(t *testing.T) {
1805+
query := `
1806+
schema (pred: [Person, <人物>]) {
1807+
}
1808+
`
1809+
res, err := Parse(Request{Str: query})
1810+
require.NoError(t, err)
1811+
require.Equal(t, len(res.Schema.Predicates), 2)
1812+
require.Equal(t, len(res.Schema.Types), 0)
1813+
require.Equal(t, res.Schema.Predicates[0], "Person")
1814+
require.Equal(t, res.Schema.Predicates[1], "人物")
1815+
require.Equal(t, len(res.Schema.Fields), 0)
1816+
}
1817+
1818+
func TestParseSchemaTypeSpecialChars(t *testing.T) {
1819+
query := `
1820+
schema (type: [Person, <人物>]) {
1821+
}
1822+
`
1823+
res, err := Parse(Request{Str: query})
1824+
require.NoError(t, err)
1825+
require.Equal(t, len(res.Schema.Predicates), 0)
1826+
require.Equal(t, len(res.Schema.Types), 2)
1827+
require.Equal(t, res.Schema.Types[0], "Person")
1828+
require.Equal(t, res.Schema.Types[1], "人物")
1829+
require.Equal(t, len(res.Schema.Fields), 0)
1830+
}
1831+
18041832
func TestParseSchemaError(t *testing.T) {
18051833
query := `
18061834
schema () {

gql/state.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -251,6 +251,8 @@ func lexInsideSchema(l *lex.Lexer) lex.StateFn {
251251
l.Emit(itemRightSquare)
252252
case isSpace(r) || lex.IsEndOfLine(r):
253253
l.Ignore()
254+
case r == lsThan:
255+
return lexIRIRef
254256
case isNameBegin(r):
255257
return lexArgName
256258
case r == '#':

0 commit comments

Comments
 (0)