예제 #1
0
            public static void Write(CharStream sqlStream, valueType value, ConstantConverter converter, string columnName)
            {
#if NOJIT
                if (fields != null)
                {
                    string[] columnNames         = update.GetColumnNames(columnName);
                    object[] sqlColumnParameters = null, castParameters = null, parameters = null;
                    object   objectValue         = value;
                    int      index = 0;
                    foreach (sqlModel.updateField field in fields)
                    {
                        if (index != 0)
                        {
                            sqlStream.WriteNotNull(" and ");
                        }
                        field.Set(sqlStream, objectValue, converter, columnNames[index++], ref sqlColumnParameters, ref castParameters, ref parameters);
                    }
                }
#else
                if (writer != null)
                {
                    writer(sqlStream, value, converter, Updater.GetColumnNames(columnName));
                }
#endif
                else if (custom != null)
                {
                    custom.Where(sqlStream, value, converter, columnName);
                }
            }
예제 #2
0
            public static void Write(CharStream sqlStream, modelType value, ConstantConverter converter)
            {
#if NOJIT
                if (fields != null)
                {
                    byte     isAnd = 0;
                    object[] sqlColumnParameters = null, castParameters = null, parameters = null;
                    foreach (sqlModel.updateField field in fields)
                    {
                        if (isAnd == 0)
                        {
                            isAnd = 1;
                        }
                        else
                        {
                            sqlStream.WriteNotNull(" and ");
                        }
                        field.Set(sqlStream, value, converter, ref sqlColumnParameters, ref castParameters, ref parameters);
                    }
                }
#else
                if (writer != null)
                {
                    writer(sqlStream, value, converter);
                }
#endif
            }
예제 #3
0
            public static void Insert(CharStream sqlStream, valueType value, ConstantConverter converter)
            {
#if NOJIT
                if (fields != null)
                {
                    object[] sqlColumnParameters = null, castParameters = null, parameters = null;
                    object   objectValue         = value;
                    byte     isNext = 0;
                    foreach (sqlModel.insertField field in fields)
                    {
                        if (isNext == 0)
                        {
                            isNext = 1;
                        }
                        else
                        {
                            sqlStream.Write(',');
                        }
                        AutoCSer.code.cSharp.sqlModel.fieldInfo fieldInfo = field.Field;
                        if (fieldInfo.IsSqlColumn)
                        {
                            if (sqlColumnParameters == null)
                            {
                                sqlColumnParameters = new object[] { sqlStream, null, converter }
                            }
                            ;
                            sqlColumnParameters[1] = fieldInfo.Field.GetValue(objectValue);
                            field.SqlColumnMethod.Invoke(null, sqlColumnParameters);
                        }
                        else
                        {
                            object memberValue = fieldInfo.Field.GetValue(objectValue);
                            if (fieldInfo.ToSqlCastMethod != null)
                            {
                                if (castParameters == null)
                                {
                                    castParameters = new object[1];
                                }
                                castParameters[0] = memberValue;
                                memberValue       = fieldInfo.ToSqlCastMethod.Invoke(null, castParameters);
                            }
                            if (parameters == null)
                            {
                                parameters = new object[] { sqlStream, null }
                            }
                            ;
                            parameters[1] = memberValue;
                            fieldInfo.ToSqlMethod.Invoke(converter, parameters);
                        }
                    }
                }
#else
                if (inserter != null)
                {
                    inserter(sqlStream, value, converter);
                }
#endif
                else if (custom != null)
                {
                    custom.Insert(sqlStream, value, converter);
                }
            }
예제 #4
0
 private static void insert <valueType>(CharStream sqlStream, valueType value, ConstantConverter converter)
 {
     Column <valueType> .Inserter.Insert(sqlStream, value, converter);
 }
예제 #5
0
            public static void Update(CharStream sqlStream, MemberMap memberMap, modelType value, ConstantConverter converter, Table table)
            {
#if NOJIT
                if (fields != null)
                {
                    byte     isNext = 0;
                    object[] sqlColumnParameters = null, castParameters = null, parameters = null;
                    foreach (sqlModel.updateField field in fields)
                    {
                        if (memberMap.IsMember(field.Field.MemberMapIndex))
                        {
                            if (isNext == 0)
                            {
                                isNext = 1;
                            }
                            else
                            {
                                sqlStream.Write(',');
                            }
                            //if (field.NowTimeField == null)
                            field.Set(sqlStream, value, converter, ref sqlColumnParameters, ref castParameters, ref parameters);
                        }
                    }
                }
#else
                if (updater != null)
                {
                    updater(sqlStream, memberMap, value, converter, table);
                }
#endif
            }
예제 #6
0
            public static void Insert(CharStream sqlStream, MemberMap memberMap, modelType value, ConstantConverter converter, Table table)
            {
#if NOJIT
                if (fields != null)
                {
                    object[] sqlColumnParameters = null, castParameters = null, parameters = null;
                    byte     isNext = 0;
                    foreach (InsertField field in fields)
                    {
                        if (memberMap.IsMember(field.Field.MemberMapIndex))
                        {
                            if (isNext == 0)
                            {
                                isNext = 1;
                            }
                            else
                            {
                                sqlStream.Write(',');
                            }
                            Field fieldInfo = field.Field;
                            if (fieldInfo.IsSqlColumn)
                            {
                                if (sqlColumnParameters == null)
                                {
                                    sqlColumnParameters = new object[] { sqlStream, null, converter }
                                }
                                ;
                                sqlColumnParameters[1] = fieldInfo.FieldInfo.GetValue(value);
                                field.SqlColumnMethod.Invoke(null, sqlColumnParameters);
                            }
                            else if (fieldInfo.NowTimeField == null)
                            {
                                object memberValue = fieldInfo.FieldInfo.GetValue(value);
                                if (fieldInfo.ToSqlCastMethod != null)
                                {
                                    if (castParameters == null)
                                    {
                                        castParameters = new object[1];
                                    }
                                    castParameters[0] = memberValue;
                                    memberValue       = fieldInfo.ToSqlCastMethod.Invoke(null, castParameters);
                                }
                                if (parameters == null)
                                {
                                    parameters = new object[] { sqlStream, null }
                                }
                                ;
                                parameters[1] = memberValue;
                                fieldInfo.ToSqlMethod.Invoke(converter, parameters);
                            }
                            else
                            {
                                if (parameters == null)
                                {
                                    parameters = new object[] { sqlStream, null }
                                }
                                ;
                                parameters[1] = fieldInfo.NowTimeField.GetValue(null);
                                fieldInfo.ToSqlMethod.Invoke(converter, parameters);
                            }
                        }
                    }
                }
#else
                if (inserter != null)
                {
                    inserter(sqlStream, memberMap, value, converter, table);
                }
#endif
            }
예제 #7
0
            /// <summary>
            /// 获取逗号分割的列名集合
            /// </summary>
            /// <param name="sqlStream"></param>
            /// <param name="memberMap"></param>
            /// <param name="constantConverter"></param>
            public static void GetColumnNames(CharStream sqlStream, MemberMap memberMap, ConstantConverter constantConverter)
            {
                int isNext = 0;

                foreach (Field member in Fields)
                {
                    if (memberMap.IsMember(member.MemberMapIndex) || member == Identity || member.DataMember.PrimaryKeyIndex != 0)
                    {
                        if (isNext == 0)
                        {
                            isNext = 1;
                        }
                        else
                        {
                            sqlStream.Write(',');
                        }
                        if (member.IsSqlColumn)
                        {
                            sqlStream.SimpleWrite(((Func <string, string>)AutoCSer.Sql.Metadata.GenericType.Get(member.FieldInfo.FieldType).InserterGetColumnNamesMethod)(member.FieldInfo.Name));
                        }
                        else
                        {
                            constantConverter.ConvertNameToSqlStream(sqlStream, member.FieldInfo.Name);
                        }
                    }
                }
            }
예제 #8
0
            /// <summary>
            /// 获取逗号分割的列名集合
            /// </summary>
            /// <param name="sqlStream"></param>
            /// <param name="memberMap"></param>
            /// <param name="constantConverter"></param>
            public static void GetColumnNames(CharStream sqlStream, MemberMap memberMap, ConstantConverter constantConverter)
            {
                int isNext = 0;

                foreach (Field member in Fields)
                {
                    if (memberMap.IsMember(member.MemberMapIndex) || member == Identity || member.DataMember.PrimaryKeyIndex != 0)
                    {
                        if (isNext == 0)
                        {
                            isNext = 1;
                        }
                        else
                        {
                            sqlStream.Write(',');
                        }
                        if (member.IsSqlColumn)
                        {
                            sqlStream.SimpleWriteNotNull(ColumnGroup.Inserter.GetColumnNames(member.FieldInfo.FieldType)(member.FieldInfo.Name));
                        }
                        else
                        {
                            constantConverter.ConvertNameToSqlStream(sqlStream, member.FieldInfo.Name);
                        }
                    }
                }
            }
예제 #9
0
파일: Model.cs 프로젝트: AutoCSer/AutoCSer
        /// <summary>
        /// 获取以逗号分割的名称集合
        /// </summary>
        /// <param name="sqlStream"></param>
        /// <param name="memberMap"></param>
        /// <param name="constantConverter"></param>
        internal static void GetNames(CharStream sqlStream, MemberMap <modelType> memberMap, ConstantConverter constantConverter)
        {
            int isNext = 0;

            foreach (Field field in Fields)
            {
                if (memberMap.IsMember(field.MemberMapIndex))
                {
                    if (isNext == 0)
                    {
                        isNext = 1;
                    }
                    else
                    {
                        sqlStream.Write(',');
                    }
                    if (field.IsSqlColumn)
                    {
                        sqlStream.SimpleWrite(field.GetSqlColumnName());
                    }
                    else
                    {
                        constantConverter.ConvertNameToSqlStream(sqlStream, field.FieldInfo.Name);
                    }
                }
            }
        }
예제 #10
0
 private static void update <valueType>(CharStream sqlStream, valueType value, ConstantConverter converter, string columnName)
 {
     Column <valueType> .Updater.Update(sqlStream, value, converter, columnName);
 }