コード例 #1
0
ファイル: sql2005.cs プロジェクト: iLanceS/fastCSharp
        /// <summary>
        /// 查询对象集合
        /// </summary>
        /// <typeparam name="valueType">对象类型</typeparam>
        /// <typeparam name="modelType">模型类型</typeparam>
        /// <param name="sqlTool">SQL操作工具</param>
        /// <param name="query">查询信息</param>
        /// <param name="memberMap">成员位图</param>
        /// <returns>对象集合</returns>
        private unsafe IEnumerable <valueType> selectRowsPushMemberMap <valueType, modelType>
            (fastCSharp.emit.sqlTable.sqlTool <valueType, modelType> sqlTool, selectQuery <modelType> query, fastCSharp.code.memberMap <modelType> memberMap)
            where valueType : class, modelType
            where modelType : class
        {
            string sql = selectRows(sqlTool, query, memberMap, new charStream((char *)fastCSharp.emit.pub.PuzzleValue, 1));

            return(sql != null?selectPushMemberMap <valueType, modelType>(sql, 0, memberMap) : nullValue <valueType> .Array);
        }
コード例 #2
0
        /// <summary>
        /// 查询对象集合
        /// </summary>
        /// <typeparam name="valueType">对象类型</typeparam>
        /// <typeparam name="memberType">成员位图类型</typeparam>
        /// <param name="sqlTool">SQL操作工具</param>
        /// <param name="query">查询信息</param>
        /// <param name="memberMap">成员位图</param>
        /// <returns>对象集合</returns>
        private IEnumerable <valueType> selectRows <valueType, memberType>
            (sqlTable.sqlToolBase <valueType, memberType> sqlTool, selectQuery query, memberType memberMap)
            where valueType : class
            where memberType : IMemberMap <memberType>
        {
            string sql = @"select * from(select " + getMemberNames(sqlTool.MemberInfo, memberMap).joinString(',') + ",row_number()over(" + query.Order + ")as " + orderOverName + " from[" + sqlTool.TableName + "]with(nolock)" + (query.Where != null ? "where " + query.Where + " " : null) + ")as T where " + orderOverName + " between " + query.SkipCount.toString() + " and " + (query.SkipCount + query.GetCount - 1).toString();

            return(select <valueType, memberType>(sql, sqlTool, 0, memberMap));
        }
コード例 #3
0
ファイル: sql2005.cs プロジェクト: iLanceS/fastCSharp
        /// <summary>
        /// 查询对象集合
        /// </summary>
        /// <typeparam name="valueType">对象类型</typeparam>
        /// <typeparam name="modelType">成员位图类型</typeparam>
        /// <param name="sqlTool">SQL操作工具</param>
        /// <param name="query">查询信息</param>
        /// <param name="keyName">关键之名称</param>
        /// <param name="memberMap">成员位图</param>
        /// <param name="sqlStream"></param>
        /// <returns></returns>
        private unsafe string selectKeys <valueType, modelType>
            (fastCSharp.emit.sqlTable.sqlTool <valueType, modelType> sqlTool, selectQuery <modelType> query, string keyName, fastCSharp.code.memberMap <modelType> memberMap, charStream sqlStream)
            where valueType : class, modelType
            where modelType : class
        {
            pointer buffer = fastCSharp.sql.client.SqlBuffers.Get();

            try
            {
                using (sqlStream)
                {
                    sqlStream.UnsafeReset(buffer.Byte, SqlBufferSize << 1);
                    sqlStream.SimpleWriteNotNull("select ");
                    sqlModel <modelType> .GetNames(sqlStream, memberMap);

                    sqlStream.SimpleWriteNotNull(" from[");
                    sqlStream.SimpleWriteNotNull(sqlTool.TableName);
                    sqlStream.WriteNotNull("]with(nolock)where ");
                    sqlStream.SimpleWriteNotNull(keyName);
                    sqlStream.SimpleWriteNotNull(" in(select ");
                    sqlStream.SimpleWriteNotNull(keyName);
                    sqlStream.SimpleWriteNotNull(" from(select ");
                    sqlStream.SimpleWriteNotNull(keyName);
                    sqlStream.WriteNotNull(",row_number()over(");
                    int startIndex = sqlStream.Length;
                    query.WriteOrder(sqlTool, sqlStream);
                    int count = sqlStream.Length - startIndex;
                    sqlStream.SimpleWriteNotNull(")as ");
                    sqlStream.SimpleWriteNotNull(orderOverName);
                    sqlStream.SimpleWriteNotNull(" from[");
                    sqlStream.SimpleWriteNotNull(sqlTool.TableName);
                    sqlStream.SimpleWriteNotNull("]with(nolock)");
                    if (query.WriteWhereOnly(sqlTool, sqlStream))
                    {
                        sqlStream.SimpleWriteNotNull(")as T where ");
                        sqlStream.SimpleWriteNotNull(orderOverName);
                        sqlStream.SimpleWriteNotNull(" between ");
                        number.ToString(query.SkipCount, sqlStream);
                        sqlStream.SimpleWriteNotNull(" and ");
                        number.ToString(query.SkipCount + query.GetCount - 1, sqlStream);
                        sqlStream.Write(')');
                        if (count != 0)
                        {
                            sqlStream.Write(sqlStream.Char + startIndex, count);
                        }
                        return(sqlStream.ToString());
                    }
                }
            }
            finally { fastCSharp.sql.client.SqlBuffers.Push(ref buffer); }
            return(null);
        }
コード例 #4
0
ファイル: sql2005.cs プロジェクト: iLanceS/fastCSharp
 /// <summary>
 /// 查询对象集合
 /// </summary>
 /// <typeparam name="valueType">对象类型</typeparam>
 /// <typeparam name="modelType">模型类型</typeparam>
 /// <param name="sqlTool">SQL操作工具</param>
 /// <param name="query">查询信息</param>
 /// <param name="memberMap">成员位图</param>
 /// <returns>对象集合</returns>
 protected override IEnumerable <valueType> selectPushMemberMap <valueType, modelType>
     (fastCSharp.emit.sqlTable.sqlTool <valueType, modelType> sqlTool, selectQuery <modelType> query, fastCSharp.code.memberMap <modelType> memberMap)
 {
     if (query != null && query.SkipCount != 0 && query.Orders.length() != 0)
     {
         if (sqlModel <modelType> .PrimaryKeys.Length == 1)
         {
             return(selectKeysPushMemberMap(sqlTool, query, sqlModel <modelType> .PrimaryKeys[0].SqlFieldName, memberMap));
         }
         if (sqlModel <modelType> .Identity != null)
         {
             return(selectKeysPushMemberMap(sqlTool, query, sqlModel <modelType> .Identity.SqlFieldName, memberMap));
         }
         return(selectRowsPushMemberMap(sqlTool, query, memberMap));
     }
     return(selectNoOrderPushMemberMap(sqlTool, query, memberMap));
 }
コード例 #5
0
 /// <summary>
 /// 查询对象集合
 /// </summary>
 /// <typeparam name="valueType">对象类型</typeparam>
 /// <typeparam name="memberType">成员位图类型</typeparam>
 /// <param name="sqlTool">SQL操作工具</param>
 /// <param name="query">查询信息</param>
 /// <param name="memberMap">成员位图</param>
 /// <returns>对象集合</returns>
 internal override IEnumerable <valueType> select <valueType, memberType>
     (sqlTable.sqlToolBase <valueType, memberType> sqlTool, selectQuery query, memberType memberMap)
 {
     if (query.SkipCount != 0 && query.Orders.length() != 0)
     {
         if (sqlTool.PrimaryKeyCount == 1)
         {
             return(selectKeys(sqlTool, query, sqlTool.FirstPrimaryKeyName, memberMap));
         }
         if (sqlTool.IdentityMemberIndex != sqlTable.NullIdentityMemberIndex)
         {
             return(selectKeys(sqlTool, query, sqlTool.MemberInfo.GetName(sqlTool.IdentityMemberIndex), memberMap));
         }
         return(selectRows(sqlTool, query, memberMap));
     }
     return(selectNoOrder(sqlTool, query, memberMap));
 }
コード例 #6
0
ファイル: sql2005.cs プロジェクト: iLanceS/fastCSharp
        /// <summary>
        /// 查询对象集合
        /// </summary>
        /// <typeparam name="valueType">对象类型</typeparam>
        /// <typeparam name="modelType">模型类型</typeparam>
        /// <param name="sqlTool">SQL操作工具</param>
        /// <param name="query">查询信息</param>
        /// <param name="memberMap">成员位图</param>
        /// <param name="onGet"></param>
        public override void Select <valueType, modelType>
            (fastCSharp.emit.sqlTable.sqlTool <valueType, modelType> sqlTool, selectQuery <modelType> query, fastCSharp.code.memberMap <modelType> memberMap, Action <subArray <valueType> > onGet)
        {
            if (onGet == null)
            {
                log.Error.Throw(log.exceptionType.Null);
            }
            subArray <valueType> values = default(subArray <valueType>);

            try
            {
                selector <valueType, modelType> selector = selector <valueType, modelType> .Get();

                if (selector != null)
                {
                    selector.MemberMap.CopyFrom(fastCSharp.emit.sqlModel <modelType> .MemberMap);
                    if (memberMap != null && !memberMap.IsDefault)
                    {
                        selector.MemberMap.And(memberMap);
                    }
                    if (query != null && query.SkipCount != 0 && query.Orders.length() != 0)
                    {
                        if (sqlModel <modelType> .PrimaryKeys.Length == 1)
                        {
                            string sql = selectKeys(sqlTool, query, sqlModel <modelType> .PrimaryKeys[0].SqlFieldName, selector.MemberMap, selector.SqlStream);
                            if (sql != null)
                            {
                                selector.Get(this, sql, 0, ref onGet);
                                return;
                            }
                            values.array = nullValue <valueType> .Array;
                        }
                        else if (sqlModel <modelType> .Identity != null)
                        {
                            string sql = selectKeys(sqlTool, query, sqlModel <modelType> .Identity.SqlFieldName, selector.MemberMap, selector.SqlStream);
                            if (sql != null)
                            {
                                selector.Get(this, sql, 0, ref onGet);
                                return;
                            }
                            values.array = nullValue <valueType> .Array;
                        }
                        else
                        {
                            string sql = selectRows(sqlTool, query, selector.MemberMap, selector.SqlStream);
                            if (sql != null)
                            {
                                selector.Get(this, sql, 0, ref onGet);
                                return;
                            }
                            values.array = nullValue <valueType> .Array;
                        }
                    }
                    if (values.array == null)
                    {
                        string sql = selectNoOrder(sqlTool, query, selector.MemberMap, selector.SqlStream);
                        if (sql != null)
                        {
                            selector.Get(this, sql, query == null ? 0 : query.SkipCount, ref onGet);
                            return;
                        }
                        values.array = nullValue <valueType> .Array;
                    }
                    typePool <selector <valueType, modelType> > .PushNotNull(selector);
                }
            }
            finally
            {
                if (onGet != null)
                {
                    onGet(values);
                }
            }
        }