# Define namespace DEFINE NAMESPACE test ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident)) # Define namespace if not exists DEFINE NAMESPACE IF NOT EXISTS test ==> SurrealQL(DefineStatement(Keyword,Keyword,IfNotExistsClause(Keyword,Keyword,Keyword),Ident)) # Define namespace overwrite DEFINE NAMESPACE OVERWRITE test ==> SurrealQL(DefineStatement(Keyword,Keyword,OverwriteClause(Keyword),Ident)) # Define database DEFINE DATABASE test ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident)) # Define user DEFINE USER tobie ON ROOT PASSWORD "secret" ROLES owner ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnRootNsDbClause(Keyword,Keyword),Keyword,String,Keyword,Ident)) # Define event DEFINE EVENT myevent ON TABLE person WHEN $event = "CREATE" THEN (CREATE log) ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),WhenClause(Keyword,BinaryExpression(VariableName,Operator,String)),ThenClause(Keyword,SubQuery(CreateStatement(Keyword,Ident))))) # Define field DEFINE FIELD name ON TABLE person TYPE string ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName))) # Define field with default DEFINE FIELD age ON TABLE person TYPE number DEFAULT 0 ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),DefaultClause(Keyword,DefaultAlways,Number(Int)))) # Define field with assert DEFINE FIELD email ON TABLE person TYPE string ASSERT $value != NONE ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),AssertClause(Keyword,BinaryExpression(VariableName,Operator,None)))) # Define field readonly DEFINE FIELD created ON TABLE person TYPE datetime READONLY ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),ReadonlyClause(Keyword))) # Define field flexible type DEFINE FIELD data ON TABLE person FLEXIBLE TYPE object ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,Keyword,TypeName))) # Define field with permissions DEFINE FIELD secret ON TABLE person TYPE string PERMISSIONS FOR select, create WHERE $auth.admin = true ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),PermissionsForClause(Keyword,PermissionGroup(Keyword,Keyword,Keyword,WhereClause(Keyword,BinaryExpression(Path(VariableName,Subscript(Ident)),Operator,Bool)))))) # Define field with reference DEFINE FIELD author ON TABLE post TYPE record REFERENCE ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),TypeClause(Keyword,TypeName),ReferenceClause(Keyword))) # Define field with computed DEFINE FIELD fullname ON TABLE person COMPUTED $value.first + " " + $value.last ==> SurrealQL(DefineStatement(Keyword,Keyword,Idiom(Ident),OnTableClause(Keyword,Keyword,Ident),ComputedClause(Keyword,BinaryExpression(BinaryExpression(Path(VariableName,Subscript(Ident)),Operator,String),Operator,Path(VariableName,Subscript(Ident)))))) # Define index unique DEFINE INDEX idx_email ON TABLE person FIELDS email UNIQUE ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(UniqueClause(Keyword)))) # Define index search analyzer DEFINE INDEX idx_search ON TABLE person FIELDS name SEARCH ANALYZER my_analyzer BM25 ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(SearchAnalyzerClause(Keyword,Keyword,Ident,Bm25Clause(Keyword))))) # Define index mtree DEFINE INDEX idx_vec ON TABLE person FIELDS embedding MTREE DIMENSION 3 ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(MtreeClause(Keyword,IndexDimensionClause(Keyword,Number(Int)))))) # Define index hnsw DEFINE INDEX idx_vec ON TABLE person FIELDS embedding HNSW DIMENSION 3 ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,OnTableClause(Keyword,Keyword,Ident),FieldsColumnsClause(Keyword,Idiom(Ident)),IndexClause(HnswClause(Keyword,IndexDimensionClause(Keyword,Number(Int)))))) # Define function DEFINE FUNCTION fn::greet($name: string) { RETURN "Hello, " + $name + "!"; } ==> SurrealQL(DefineStatement(Keyword,Keyword,FunctionName,ParamDefinition(VariableName,Colon,Type(TypeName)),Block(BraceOpen,ReturnStatement(Keyword,BinaryExpression(BinaryExpression(String,Operator,VariableName),Operator,String)),BraceClose))) # Define param DEFINE PARAM $endpointBase VALUE "https://dummyjson.com" ==> SurrealQL(DefineStatement(Keyword,Keyword,VariableName,Keyword,String)) # Define table DEFINE TABLE person ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident)) # Define table schemafull DEFINE TABLE person SCHEMAFULL ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,Keyword)) # Define table schemaless DEFINE TABLE person SCHEMALESS ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,Keyword)) # Define table drop DEFINE TABLE person DROP ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,Keyword)) # Define table type relation DEFINE TABLE knows TYPE RELATION IN person OUT person ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableTypeClause(Keyword,Keyword,Keyword,Ident,Keyword,Ident,EnforcedClause))) # Define table type normal DEFINE TABLE person TYPE NORMAL ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableTypeClause(Keyword,Keyword))) # Define table type any DEFINE TABLE person TYPE ANY ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableTypeClause(Keyword,Keyword))) # Define table as view DEFINE TABLE adult AS SELECT * FROM person WHERE age > 18 ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,TableViewClause(Keyword,Keyword,Any,Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,Number(Int)))))) # Define table with changefeed DEFINE TABLE person CHANGEFEED 1d ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,ChangefeedClause(Keyword,Duration(DurationPart)))) # Define table with permissions none DEFINE TABLE person PERMISSIONS NONE ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,PermissionsForClause(Keyword,None))) # Define table with comment DEFINE TABLE person COMMENT "People table" ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident,CommentClause(Keyword,String))) # Define access on database DEFINE ACCESS myaccess ON DATABASE TYPE RECORD SIGNUP (CREATE user SET email = $email) SIGNIN (SELECT * FROM user WHERE email = $email) ==> SurrealQL(DefineStatement(Keyword,AccessDefinition(Keyword,Ident,OnRootNsDbClause(Keyword,Keyword),AccessTypeClause(Keyword,Keyword,SignupClause(Keyword,SubQuery(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,VariableName))))),SigninClause(Keyword,SubQuery(SelectStatement(Keyword,Fields(Any),Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,VariableName))))))))) # Define config graphql DEFINE CONFIG GRAPHQL AUTO ==> SurrealQL(DefineStatement(Keyword,Keyword,Keyword,Keyword)) # Define bucket DEFINE BUCKET mybucket ==> SurrealQL(DefineStatement(Keyword,Keyword,Ident)) # Define scope DEFINE SCOPE account SESSION 24h SIGNUP (CREATE user SET email = $email) SIGNIN (SELECT * FROM user WHERE email = $email) ==> SurrealQL(DefineStatement(Keyword,ScopeDefinition(Keyword,Ident,SessionClause(Keyword,Duration(DurationPart)),SignupClause(Keyword,SubQuery(CreateStatement(Keyword,Ident,SetClause(Keyword,FieldAssignment(Ident,Operator,VariableName))))),SigninClause(Keyword,SubQuery(SelectStatement(Keyword,Fields(Any),Keyword,Ident,WhereClause(Keyword,BinaryExpression(Ident,Operator,VariableName))))))))