Пример #1
0
        public Func <System.Data.IDataReader, int, global::FormABC.Input[]> Find(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, IEnumerable <string> uris)
        {
            var sw    = query.Writer;
            var cms   = query.Stream;
            var count = uris != null?uris.Count() : 0;

            var pks = new List <string>(count);

            foreach (var _u in uris ?? new string[0])
            {
                if (_u != null)
                {
                    pks.Add(_u);
                }
            }
            if (pks.Count == 0)
            {
                sw.Write("SELECT 0");
                return((dr, ind) => new global::FormABC.Input[0]);
            }

            if (query.UsePrepared)
            {
                sw.Write(@"SELECT array_agg(_r) FROM ""FormABC"".""Input_entity"" _r WHERE _r.""ID"" = ANY(");
                var nextArg = query.GetNextArgument(wr =>
                {
                    wr.Write("ARRAY[");
                    PostgresRecordConverter.WriteSimpleUriList(wr, pks);
                    wr.Write("]::uuid[]");
                },
                                                    "uuid[]");
                sw.Write(nextArg);
                sw.Write(')');
            }
            else
            {
                sw.Write(@"SELECT array_agg(_r) FROM ""FormABC"".""Input_entity"" _r WHERE _r.""ID"" IN (");
                PostgresRecordConverter.WriteSimpleUriList(sw, pks);
                sw.Write(')');
            }
            return((dr, ind) =>
            {
                var result = new List <global::FormABC.Input>(pks.Count);
                var _pg = dr.GetValue(ind);
                var _str = _pg as string;
                if (_str != null)
                {
                    result.AddRange(PostgresTypedArray.ParseCollection(cms.UseBufferedReader(_str), 0, Locator, _DatabaseCommon.FactoryFormABC_Input.InputConverter.CreateFromRecord));
                }
                else
                {
                    using (var _tr = _pg as System.IO.TextReader ?? new System.IO.StringReader(_pg.ToString()))
                        result.AddRange(PostgresTypedArray.ParseCollection(cms.UseBufferedReader(_tr), 0, Locator, _DatabaseCommon.FactoryFormABC_Input.InputConverter.CreateFromRecord));
                }
                var found = result.ToArray();

                return found;
            });
        }
Пример #2
0
        public Func <System.Data.IDataReader, int, global::FormABC.Input> Find(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, string uri)
        {
            var sw  = query.Writer;
            var cms = query.Stream;

            if (uri == null)
            {
                sw.Write("SELECT 0");
                return((dr, ind) => null);
            }
            sw.Write(@"SELECT _r FROM ""FormABC"".""Input_entity"" _r WHERE _r.""ID"" = ");
            if (query.UsePrepared)
            {
                var nextArg = query.GetNextArgument(wr =>
                {
                    PostgresRecordConverter.WriteSimpleUri(wr, uri);
                    wr.Write("::uuid");
                },
                                                    "uuid");
                sw.Write(nextArg);
            }
            else
            {
                PostgresRecordConverter.WriteSimpleUri(sw, uri);
            }
            return((dr, ind) =>
            {
                global::FormABC.Input result = null;
                var _pg = dr.GetValue(ind);
                var _str = _pg as string;
                if (_str != null)
                {
                    result = _DatabaseCommon.FactoryFormABC_Input.InputConverter.CreateFromRecord(cms.UseBufferedReader(_str), 0, Locator);
                }
                else
                {
                    using (var _tr = _pg as System.IO.TextReader ?? new System.IO.StringReader(_pg.ToString()))
                        result = _DatabaseCommon.FactoryFormABC_Input.InputConverter.CreateFromRecord(cms.UseBufferedReader(_tr), 0, Locator);
                }
                if (!HasCustomSecurity)
                {
                    return result;
                }
                var found = new [] { result };

                return found.Length == 1 ? result : null;
            });
        }
Пример #3
0
        public Func <System.Data.IDataReader, int, global::FormABC.Input[]> Search(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, ISpecification <global::FormABC.Input> specification, int?limit, int?offset)
        {
            var selectType = "SELECT array_agg(_r) FROM (SELECT _it as _r";
            var sw         = query.Writer;
            var cms        = query.Stream;

            if (specification == null)
            {
                sw.Write(@"SELECT array_agg(_r) FROM (SELECT _r FROM ""FormABC"".""Input_entity"" _r");
            }

            else
            {
                sw.Write("SELECT 0");
                return((dr, ind) => Search(specification, limit, offset));
            }
            if (limit != null && limit.Value >= 0)
            {
                sw.Write(" LIMIT ");
                sw.Write(limit.Value);
            }
            if (offset != null && offset.Value >= 0)
            {
                sw.Write(" OFFSET ");
                sw.Write(offset.Value);
            }
            sw.Write(@") _sq");
            return((dr, ind) =>
            {
                List <global::FormABC.Input> result;
                var _pg = dr.GetValue(ind);
                var _str = _pg as string;
                if (_str != null)
                {
                    result = PostgresTypedArray.ParseCollection(cms.UseBufferedReader(_str), 0, Locator, _DatabaseCommon.FactoryFormABC_Input.InputConverter.CreateFromRecord);
                }
                else
                {
                    using (var _tr = _pg as System.IO.TextReader ?? new System.IO.StringReader(_pg.ToString()))
                        result = PostgresTypedArray.ParseCollection(cms.UseBufferedReader(_tr), 0, Locator, _DatabaseCommon.FactoryFormABC_Input.InputConverter.CreateFromRecord);
                }
                var found = result.ToArray();

                return found;
            });
        }
Пример #4
0
        public Func <System.Data.IDataReader, int, long> Count(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, ISpecification <global::FormABC.Input> specification)
        {
            var selectType = "SELECT count(*)";
            var sw         = query.Writer;
            var cms        = query.Stream;

            if (specification == null)
            {
                sw.Write(@"SELECT count(*) FROM ""FormABC"".""Input_entity"" r");
            }

            else
            {
                sw.Write("SELECT 0");
                return((dr, ind) => Query(specification).LongCount());
            }
            return((dr, ind) => dr.GetInt64(ind));
        }
Пример #5
0
        public Func <System.Data.IDataReader, int, bool> Exists(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, ISpecification <global::Test.XYZ> specification)
        {
            var selectType = "exists(SELECT *";
            var sw         = query.Writer;
            var cms        = query.Stream;

            if (specification == null)
            {
                sw.Write(@"exists(SELECT * FROM ""Test"".""XYZ_entity"" r");
            }


            else if (specification is global::Test.XYZ.FindBy)
            {
                var spec = specification as global::Test.XYZ.FindBy;
                sw.Write(selectType);
                sw.Write(@" FROM ""Test"".""XYZ.FindBy""(");
                if (query.UsePrepared)
                {
                    sw.Write(query.GetNextArgument(tw =>
                    {
                        tw.Write('\'');
                        _DatabaseCommon.Utility.StringToTuple(spec.from).InsertRecord(tw, cms.SmallBuffer, string.Empty, PostgresTuple.EscapeQuote);
                        tw.Write('\'');
                        tw.Write("::varchar");
                    },
                                                   "varchar"));
                }
                else
                {
                    sw.Write('\'');
                    _DatabaseCommon.Utility.StringToTuple(spec.from).InsertRecord(sw, cms.SmallBuffer, string.Empty, PostgresTuple.EscapeQuote);
                    sw.Write('\'');
                }
                sw.Write(") _it");
            }
            else
            {
                sw.Write("SELECT 0");
                return((dr, ind) => Query(specification).Any());
            }
            sw.Write(')');
            return((dr, ind) => dr.GetBoolean(ind));
        }
Пример #6
0
        public Func <System.Data.IDataReader, int, bool> Exists(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, ISpecification <global::FormABC.Input> specification)
        {
            var selectType = "exists(SELECT *";
            var sw         = query.Writer;
            var cms        = query.Stream;

            if (specification == null)
            {
                sw.Write(@"exists(SELECT * FROM ""FormABC"".""Input_entity"" r");
            }

            else
            {
                sw.Write("SELECT 0");
                return((dr, ind) => Query(specification).Any());
            }
            sw.Write(')');
            return((dr, ind) => dr.GetBoolean(ind));
        }
Пример #7
0
        public Func <System.Data.IDataReader, int, long> Count(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, ISpecification <global::UseCase1.SelectedSubmission> specification)
        {
            var selectType = "SELECT count(*)";
            var sw         = query.Writer;
            var cms        = query.Stream;

            if (specification == null)
            {
                sw.Write(@"SELECT count(*) FROM ""UseCase1"".""SelectedSubmission"" r");
            }


            else if (specification is global::UseCase1.SelectedSubmission.Where)
            {
                var spec = specification as global::UseCase1.SelectedSubmission.Where;
                sw.Write(selectType);
                sw.Write(@" FROM ""UseCase1"".""SelectedSubmission.Where""(");
                if (query.UsePrepared)
                {
                    sw.Write(query.GetNextArgument(tw =>
                    {
                        tw.Write('\'');
                        _DatabaseCommon.Utility.StringToTuple(spec.uri).InsertRecord(tw, cms.SmallBuffer, string.Empty, PostgresTuple.EscapeQuote);
                        tw.Write('\'');
                        tw.Write("::varchar");
                    },
                                                   "varchar"));
                }
                else
                {
                    sw.Write('\'');
                    _DatabaseCommon.Utility.StringToTuple(spec.uri).InsertRecord(sw, cms.SmallBuffer, string.Empty, PostgresTuple.EscapeQuote);
                    sw.Write('\'');
                }
                sw.Write(") _it");
            }
            else
            {
                sw.Write("SELECT 0");
                return((dr, ind) => Query(specification).LongCount());
            }
            return((dr, ind) => dr.GetInt64(ind));
        }
Пример #8
0
        public Func <System.Data.IDataReader, int, global::Test.XYZ[]> Search(Revenj.DatabasePersistence.Postgres.IBulkReadQuery query, ISpecification <global::Test.XYZ> specification, int?limit, int?offset)
        {
            var selectType = "SELECT array_agg(_r) FROM (SELECT _it as _r";
            var sw         = query.Writer;
            var cms        = query.Stream;

            if (specification == null)
            {
                sw.Write(@"SELECT array_agg(_r) FROM (SELECT _r FROM ""Test"".""XYZ_entity"" _r");
            }


            else if (specification is global::Test.XYZ.FindBy)
            {
                var spec = specification as global::Test.XYZ.FindBy;
                sw.Write(selectType);
                sw.Write(@" FROM ""Test"".""XYZ.FindBy""(");
                if (query.UsePrepared)
                {
                    sw.Write(query.GetNextArgument(tw =>
                    {
                        tw.Write('\'');
                        _DatabaseCommon.Utility.StringToTuple(spec.from).InsertRecord(tw, cms.SmallBuffer, string.Empty, PostgresTuple.EscapeQuote);
                        tw.Write('\'');
                        tw.Write("::varchar");
                    },
                                                   "varchar"));
                }
                else
                {
                    sw.Write('\'');
                    _DatabaseCommon.Utility.StringToTuple(spec.from).InsertRecord(sw, cms.SmallBuffer, string.Empty, PostgresTuple.EscapeQuote);
                    sw.Write('\'');
                }
                sw.Write(") _it");
            }
            else
            {
                sw.Write("SELECT 0");
                return((dr, ind) => Search(specification, limit, offset));
            }
            if (limit != null && limit.Value >= 0)
            {
                sw.Write(" LIMIT ");
                sw.Write(limit.Value);
            }
            if (offset != null && offset.Value >= 0)
            {
                sw.Write(" OFFSET ");
                sw.Write(offset.Value);
            }
            sw.Write(@") _sq");
            return((dr, ind) =>
            {
                List <global::Test.XYZ> result;
                var _pg = dr.GetValue(ind);
                var _str = _pg as string;
                if (_str != null)
                {
                    result = PostgresTypedArray.ParseCollection(cms.UseBufferedReader(_str), 0, Locator, _DatabaseCommon.FactoryTest_XYZ.XYZConverter.CreateFromRecord);
                }
                else
                {
                    using (var _tr = _pg as System.IO.TextReader ?? new System.IO.StringReader(_pg.ToString()))
                        result = PostgresTypedArray.ParseCollection(cms.UseBufferedReader(_tr), 0, Locator, _DatabaseCommon.FactoryTest_XYZ.XYZConverter.CreateFromRecord);
                }
                var found = result.ToArray();

                return found;
            });
        }