/// <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); }
/// <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)); }
/// <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); }
/// <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)); }
/// <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)); }
/// <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); } } }