Example #1
0
            static Verifyer()
            {
                if (attribute != null && custom == null && Fields != null)
                {
                    LeftArray <Field> verifyFields = Fields.getFind(value => value.IsVerify);
                    if (verifyFields.Length != 0)
                    {
                        columnNames = new AutoCSer.Threading.LockDictionary <HashString, string[]>();
                        int index = 0;
                        Verifyer.verifyFields = verifyFields.ToArray();
#if NOJIT
                        fields = new sqlColumn.verifyDynamicMethod.field[verifyFields.length];
                        foreach (AutoCSer.code.cSharp.sqlModel.fieldInfo member in verify.verifyFields)
                        {
                            fields[index++].Set(member);
                        }
#else
                        ColumnGroup.Verifyer dynamicMethod = new ColumnGroup.Verifyer(typeof(valueType), attribute);
                        foreach (Field member in Verifyer.verifyFields)
                        {
                            dynamicMethod.Push(member, index++);
                        }
                        verifyer = (Func <valueType, Table, string[], bool>)dynamicMethod.Create <Func <valueType, Table, string[], bool> >();
#endif
                        AutoCSer.Memory.Common.AddClearCache(columnNames.Clear, typeof(Verifyer), 60 * 60);
                    }
                }
            }
Example #2
0
        static Column()
        {
            Type type = typeof(valueType);

            if (type.IsEnum || !type.IsValueType)
            {
                AutoCSer.LogHelper.Error(type.fullName() + " 非值类型,不能用作数据列", LogLevel.Error | LogLevel.AutoCSer);
                return;
            }
            attribute = TypeAttribute.GetAttribute <ColumnAttribute>(type, true) ?? ColumnAttribute.Default;
            foreach (MethodInfo method in type.GetMethods(System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.NonPublic))
            {
#if NOJIT
                if (typeof(ICustom).IsAssignableFrom(method.ReturnType)
#else
                if (typeof(ICustom <valueType>).IsAssignableFrom(method.ReturnType)
#endif
                    && method.GetParameters().Length == 0 && method.IsDefined(typeof(ColumnAttribute), false))
                {
                    object customValue = method.Invoke(null, null);
                    if (customValue != null)
                    {
#if NOJIT
                        custom = (ICustom)customValue;
#else
                        custom = (ICustom <valueType>)customValue;
#endif
                        return;
                    }
                }
            }
            Fields      = Field.Get(MemberIndexGroup <valueType> .GetFields(attribute.MemberFilters), true).ToArray();
            dataColumns = new AutoCSer.Threading.LockDictionary <HashString, KeyValue <string, Type>[]>();
            AutoCSer.Memory.Common.AddClearCache(dataColumns.Clear, typeof(Column <valueType>), 60 * 60);
        }
Example #3
0
            static Inserter()
            {
                if (attribute != null && custom == null && Fields != null)
                {
                    columnNames = new AutoCSer.Threading.LockDictionary <HashString, string>();
#if NOJIT
                    fields = new sqlModel.insertField[Fields.Length];
                    int index = 0;
                    foreach (AutoCSer.code.cSharp.sqlModel.fieldInfo member in Fields)
                    {
                        fields[index++].Set(member);
                    }
#else
                    ColumnGroup.Inserter dynamicMethod = new ColumnGroup.Inserter(typeof(valueType), attribute);
                    foreach (Field member in Fields)
                    {
                        dynamicMethod.Push(member);
                    }
                    inserter = (Action <CharStream, valueType, ConstantConverter>)dynamicMethod.Create <Action <CharStream, valueType, ConstantConverter> >();
#endif
                    AutoCSer.Memory.Common.AddClearCache(columnNames.Clear, typeof(Inserter), 60 * 60);
                }
            }