示例#1
0
        /// <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)) };
        }
示例#2
0
        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);
                    }
                }
            }
        }
示例#3
0
        // 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_);
                }
            }
        }