/// <summary>Creates a new instance of this class.</summary> /// <param name="obj">Object.</param> /// <param name="fieldName">FIeld name.</param> public LazyList(object obj, string fieldName) { __Field f = obj._GetEntity().GetFieldByName(fieldName); _Sql = f._FkSql; _Params = new Tuple <string, object>[] { new Tuple <string, object>(":fk", f.Entity.PrimaryKey.GetValue(obj)) }; }
void ValidateArguments(__Field field, GraphQLParser.ArgumentsContext arguments) { if (arguments.argument().Select(x => x.NAME().GetText()).Distinct().Count() != arguments.argument().Count()) { Error($"argument names are not unique", arguments); } foreach (var c in arguments.argument().Select(x => new { text = x.NAME().GetText(), ctx = x })) { var inputValue = field.GetInputValue(c.text); if (inputValue == null) { Error($"Received a named argument - {c.text} that is not expected for field {field.name}", c.ctx); } var valueOrVariable = c.ctx.valueOrVariable(); if (valueOrVariable.value() != null) { ValidateArgumentType(valueOrVariable.value(), inputValue.type); } } foreach (var q in field.args) { if (q.type.kind == __TypeKind.NON_NULL) { var argument = arguments.argument().FirstOrDefault(x => x.NAME().GetText() != q.name); if (argument == null) { Error($"A required field - {q.name} is missing", arguments); return; } if (argument.valueOrVariable().value().ToString() == "null") { Error($"A non-null field - {q.name} is called with null argument", arguments); } } } }
// Object types and interface types private void BuildComplexObjectType(ComplexTypeDef typeDef) { var type_ = typeDef.Type_; // build fields foreach (var fld in typeDef.Fields) { var hidden = fld.Flags.IsSet(FieldFlags.Hidden); // ex: _typename should not be listed as field in intro queries var fld_ = new __Field() { Name = fld.Name, Description = fld.Description, Type = fld.TypeRef.Type_, IsHidden = hidden }; fld.Intro_ = fld_; // convert args foreach (var inpV in fld.Args) { var inpV_ = new __InputValue() { Name = inpV.Name, Description = inpV.Description, Type = inpV.TypeRef.Type_, DefaultValue = inpV.DefaultValue + string.Empty }; inpV.Intro_ = inpV_; fld_.Args.Add(inpV_); } type_.Fields.Add(fld_); } //foreach fld // Interfaces - for ObjectTypes only if (typeDef is ObjectTypeDef objTypeDef) { foreach (var intfDef in objTypeDef.Implements) { var intf_ = intfDef.Type_; type_.Interfaces.Add(intf_); intf_.PossibleTypes.Add(type_); } } }