/// <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);
 }
예제 #3
0
        /// <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;
            }
        }