/// <summary> /// Selects entities from a Starcounter table /// </summary> public static IEnumerable <T> Select(IRequest <T> request) { switch (request.Conditions.Count) { case 0: var sql = $"{select}{GetOrderbyString(request, out _)}"; var result = Db.SQL <T>(sql); QueryConsole.Publish(sql, null, result); return(result); case 1 when request.Conditions[0] is var only && only.Operator == Operators.EQUALS: if (string.Equals(ObjectNo, only.Key, OrdinalIgnoreCase)) { return(GetFromObjectNo(only.SafeSelect(o => (ulong)only.Value))); } if (string.Equals(ObjectID, only.Key, OrdinalIgnoreCase)) { return(GetFromObjectNo(only.SafeSelect(o => DbHelper.Base64DecodeObjectID((string)only.Value)))); } else { goto default; } default: var orderBy = GetOrderbyString(request, out var orderByIndexName); var(where, values) = request.Conditions.GetSQL().MakeWhereClause(orderByIndexName, out var useOrderBy); sql = useOrderBy ? $"{select}{where}{orderBy}" : $"{select}{where}"; result = Db.SQL <T>(sql, values); QueryConsole.Publish(sql, values, result); return(!request.Conditions.HasPost(out var post) ? result : result.Where(post)); } }
private static IEnumerable <T> GetFromObjectNo(ulong objectNo) { QueryConsole.Publish($"FROMID {objectNo}", null, default(IEnumerable <T>)); if (objectNo == 0) { return(null); } return(Db.FromId(objectNo) is T t ? new[] { t } : null); }
/// <summary> /// Selects entities from a Starcounter table /// </summary> public static IEnumerable <T> Select(IRequest <T> request) { switch (request.Conditions.Count) { case 0: var sql = $"{select}"; QueryConsole.Publish(sql, null); foreach (var item in Transaction.Run(db => db.Sql <T>(sql))) { yield return(item); } yield break; case 1 when request.Conditions[0] is var only && only.Operator == Operators.EQUALS: if (string.Equals(ObjectNo, only.Key, StringComparison.OrdinalIgnoreCase)) { var objectNo = only.SafeSelect(_ => (ulong)only.Value); QueryConsole.Publish($"FROMID {objectNo}", null); if (objectNo == 0) { yield break; } yield return(Transaction.Run(db => db.Get <T>(objectNo))); yield break; } else { goto case default; } default: string orderBy = null; var(where, values) = request.Conditions.GetSQL().MakeWhereClause(null, out var useOrderBy); sql = useOrderBy ? $"{select}{where}{orderBy}" : $"{select}{where}"; QueryConsole.Publish(sql, values); if (request.Conditions.HasPost(out var post)) { request.Conditions = post; } foreach (var item in Transaction.Run(db => db.Sql <T>(sql, values))) { yield return(item); } yield break; } }