public override Cursor OpenCursor(ICrudQueryExecutionContext context, Query query)
        {
            var ctx = (MongoDbCRUDQueryExecutionContext)context;

            Connector.Collection collection;
            var qry = MakeQuery(ctx.Database, query, Source, out collection);

            Schema schema = null;
            var    dtp    = query.ResultDocType;

            if (dtp != null && typeof(TypedDoc).IsAssignableFrom(dtp))
            {
                schema = Schema.GetForTypedDoc(query.ResultDocType);
            }


            var p         = query[QUERY_PARAM_SKIP_COUNT];
            var skipCount = p != null?p.Value.AsInt(0) : 0;

            p = query[QUERY_PARAM_FETCH_BY];
            var fetchBy = p != null?p.Value.AsInt(0) : 0;

            var mcursor    = collection.Find(qry, skipCount, fetchBy);
            var enumerable = enumOpenCursor(schema, query, mcursor);

            return(new MongoDbCursor(mcursor, enumerable));
        }
        public override Doc ExecuteProcedure(ICrudQueryExecutionContext context, Query query)
        {
            var ctx = (MsSqlCRUDQueryExecutionContext)context;

            using (var cmd = ctx.Connection.CreateCommand())
            {
                cmd.CommandText = Source.StatementSource;

                PopulateParameters(cmd, query);

                cmd.Transaction = ctx.Transaction;

                try
                {
                    var affected = cmd.ExecuteNonQuery();
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-ok", cmd, null);
                    return(new RowsAffectedDoc(affected));
                }
                catch (Exception error)
                {
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-error", cmd, error);
                    throw;
                }
            }  //using command
        }
        public override RowsetBase Execute(ICrudQueryExecutionContext context, Query query, bool oneDoc = false)
        {
            var ctx    = (MsSqlCRUDQueryExecutionContext)context;
            var target = ctx.DataStore.TargetName;

            using (var cmd = ctx.Connection.CreateCommand())
            {
                cmd.CommandText = Source.StatementSource;

                PopulateParameters(cmd, query);

                cmd.Transaction = ctx.Transaction;

                SqlDataReader reader = null;
                try
                {
                    reader = oneDoc ? cmd.ExecuteReader(CommandBehavior.SingleRow) : cmd.ExecuteReader();
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-ok", cmd, null);
                }
                catch (Exception error)
                {
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-error", cmd, error);
                    throw;
                }

                using (reader)
                    return(PopulateRowset(ctx, reader, target, query, Source, oneDoc));
            }  //using command
        }
        public override Doc ExecuteProcedure(ICrudQueryExecutionContext context, Query query)
        {
            var ctx = (MongoDbCRUDQueryExecutionContext)context;

            var qry = MakeQuery(query, Source);

            var affected = ctx.Database.RunCommand(qry) != null ? 1 : 0;

            return(new RowsAffectedDoc(affected));
        }
        public override RowsetBase Execute(ICrudQueryExecutionContext context, Query query, bool oneRow = false)
        {
            var ctx = (MongoDbCRUDQueryExecutionContext)context;

            Connector.Collection collection;
            var qry = MakeQuery(ctx.Database, query, Source, out collection);

            Schema schema = null;
            var    dtp    = query.ResultDocType;

            if (dtp != null && typeof(TypedDoc).IsAssignableFrom(dtp))
            {
                schema = Schema.GetForTypedDoc(query.ResultDocType);
            }


            Rowset result = null;

            if (schema != null)
            {
                result = new Rowset(schema);
            }

            var p         = query[QUERY_PARAM_SKIP_COUNT];
            var skipCount = p != null?p.Value.AsInt(0) : 0;

            p = query[QUERY_PARAM_FETCH_BY];
            var fetchBy = p != null?p.Value.AsInt(0) : 0;

            p = query[QUERY_PARAM_FETCH_LIMIT];
            var fetchLimit = p != null?p.Value.AsInt(-1) : -1;

            using (var cursor = collection.Find(qry, skipCount, oneRow ? 1: fetchBy))
                foreach (var doc in cursor)
                {
                    if (schema == null)
                    {
                        schema = Store.Converter.InferSchemaFromBSONDocument(doc);
                        result = new Rowset(schema);
                    }

                    var row = Doc.MakeDoc(schema, query.ResultDocType);
                    Store.Converter.BSONDocumentToDataDoc(doc, row, Store.TargetName);
                    result.Add(row);

                    if (fetchLimit > 0 && result.Count >= fetchLimit)
                    {
                        break;
                    }
                }

            return(result);
        }
Beispiel #6
0
        public async override Task <RowsetBase> ExecuteAsync(ICrudQueryExecutionContext context, Query query, bool oneRow = false)
        {
            await Task.Delay(100);

            var result = new Rowset(Schema.GetForTypedDoc <Patient>());

            var p = query.FindParamByName("Msg")?.Value.AsString();

            result.Insert(new Patient {
                First_Name = "Jack", Last_Name = "Nice", Address1 = p
            });
            result.Insert(new Patient {
                First_Name = "Mary", Last_Name = "Dice", Address1 = p
            });
            return(result);
        }
        public override Schema GetSchema(ICrudQueryExecutionContext context, Query query)
        {
            var ctx = (MongoDbCRUDQueryExecutionContext)context;

            Connector.Collection collection;
            var qry = MakeQuery(ctx.Database, query, Source, out collection);

            var doc = collection.FindOne(qry);

            if (doc == null)
            {
                return(null);
            }

            return(Store.Converter.InferSchemaFromBSONDocument(doc));
        }
        public override Cursor OpenCursor(ICrudQueryExecutionContext context, Query query)
        {
            var ctx    = (MsSqlCRUDQueryExecutionContext)context;
            var target = ctx.DataStore.TargetName;

            Schema.FieldDef[] toLoad;
            Schema            schema = null;
            SqlDataReader     reader = null;
            var cmd = ctx.Connection.CreateCommand();

            try
            {
                cmd.CommandText = Source.StatementSource;

                PopulateParameters(cmd, query);

                cmd.Transaction = ctx.Transaction;

                try
                {
                    reader = cmd.ExecuteReader();
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-ok", cmd, null);
                }
                catch (Exception error)
                {
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-error", cmd, error);
                    throw;
                }


                schema = GetSchemaForQuery(target, query, reader, Source, out toLoad);
            }
            catch
            {
                if (reader != null)
                {
                    reader.Dispose();
                }
                cmd.Dispose();
                throw;
            }

            var enumerable = execEnumerable(ctx, cmd, reader, schema, toLoad, query);

            return(new MsSqlCursor(ctx, cmd, reader, enumerable));
        }
Beispiel #9
0
        public override RowsetBase Execute(ICrudQueryExecutionContext context, Query query, bool oneRow = false)
        {
            var ctx = (MongoDbCRUDQueryExecutionContext)context;

            Azos.Data.Access.MongoDb.Connector.Collection collection;
            var qry = MakeQuery(ctx.Database, query, Source, out collection);

            var rrow = new TResult();

            var sw = Stopwatch.StartNew();

            rrow.Count = collection.Count(qry);//Performs server-side count over query

            rrow.Interval = sw.Elapsed;

            var result = new Rowset(Schema.GetForTypedDoc(typeof(TResult)));

            result.Add(rrow);
            return(result);
        }
        public override Schema GetSchema(ICrudQueryExecutionContext context, Query query)
        {
            var ctx    = (MsSqlCRUDQueryExecutionContext)context;
            var target = ctx.DataStore.TargetName;

            using (var cmd = ctx.Connection.CreateCommand())
            {
                cmd.CommandText = Source.StatementSource;


                PopulateParameters(cmd, query);



                cmd.Transaction = ctx.Transaction;

                SqlDataReader reader = null;

                try
                {
                    reader = cmd.ExecuteReader(CommandBehavior.SchemaOnly);
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-ok", cmd, null);
                }
                catch (Exception error)
                {
                    GeneratorUtils.LogCommand(ctx.DataStore, "queryhandler-error", cmd, error);
                    throw;
                }


                using (reader)
                {
                    Schema.FieldDef[] toLoad;
                    return(GetSchemaForQuery(target, query, reader, Source, out toLoad));
                } //using reader
            }     //using command
        }
 public override Task <Schema> GetSchemaAsync(ICrudQueryExecutionContext context, Query query)
 {
     return(TaskUtils.AsCompletedTask(() => this.GetSchema(context, query)));
 }
 public override Schema GetSchema(ICrudQueryExecutionContext context, Query query)
 {
     throw new NotImplementedException();
 }
Beispiel #13
0
 public sealed override async Task <RowsetBase> ExecuteAsync(ICrudQueryExecutionContext context, Query query, bool oneRow = false)
 => await ProfileAsync(() => ExecuteAsync((TStoreContext)context, query, oneRow));
 public override Doc ExecuteProcedure(ICrudQueryExecutionContext context, Query query)
 {
     throw new NotImplementedException();
 }
Beispiel #15
0
 /// <summary>
 /// Executes query without fetching any data but schema. The implementation may be called by multiple threads and must be safe
 /// </summary>
 public abstract Task <Schema> GetSchemaAsync(ICrudQueryExecutionContext context, Query query);
Beispiel #16
0
 public sealed override async Task <Doc> ExecuteProcedureAsync(ICrudQueryExecutionContext context, Query query)
 => await ProfileAsync(() => ExecuteProcedureAsync((TStoreContext)context, query));
 public override Cursor OpenCursor(ICrudQueryExecutionContext context, Query query)
 {
     throw new NotImplementedException();
 }
Beispiel #18
0
 public sealed override async Task <Schema> GetSchemaAsync(ICrudQueryExecutionContext context, Query query)
 => await ProfileAsync(() => GetSchemaAsync((TStoreContext)context, query));
Beispiel #19
0
 public override Schema GetSchema(ICrudQueryExecutionContext context, Query query)
 => Profile(() => GetSchemaAsync(context, query).GetAwaiter().GetResult());
Beispiel #20
0
 /// <summary>
 /// Executes query into Cursor. The implementation may be called by multiple threads and must be safe
 /// </summary>
 public abstract Cursor OpenCursor(ICrudQueryExecutionContext context, Query query);
Beispiel #21
0
 /// <summary>
 /// Executes query which fetches rowset, such as SELECT statement. The implementation may be called by multiple threads and must be safe
 /// </summary>
 public abstract Task <RowsetBase> ExecuteAsync(ICrudQueryExecutionContext context, Query query, bool oneRow = false);
Beispiel #22
0
 /// <summary>
 /// Executes query which fetches rowset, such as SELECT statement. The implementation may be called by multiple threads and must be safe
 /// </summary>
 public abstract RowsetBase Execute(ICrudQueryExecutionContext context, Query query, bool oneRow = false);
 public override RowsetBase Execute(ICrudQueryExecutionContext context, Query query, bool oneRow = false)
 {
     throw new NotImplementedException();
 }
Beispiel #24
0
 public override Doc ExecuteProcedure(ICrudQueryExecutionContext context, Query query)
 => Profile(() => ExecuteProcedureAsync(context, query).GetAwaiter().GetResult());
 public override Task <RowsetBase> ExecuteAsync(ICrudQueryExecutionContext context, Query query, bool oneRow = false)
 {
     return(TaskUtils.AsCompletedTask(() => this.Execute(context, query, oneRow)));
 }
Beispiel #26
0
 public sealed override async Task <Cursor> OpenCursorAsync(ICrudQueryExecutionContext context, Query query)
 => await ProfileAsync(() => OpenCursorAsync((TStoreContext)context, query));
 public override Task <Cursor> OpenCursorAsync(ICrudQueryExecutionContext context, Query query)
 {
     return(TaskUtils.AsCompletedTask(() => this.OpenCursor(context, query)));
 }
Beispiel #28
0
 public override Cursor OpenCursor(ICrudQueryExecutionContext context, Query query)
 => Profile(() => OpenCursorAsync(context, query).GetAwaiter().GetResult());
 public override Task <Doc> ExecuteProcedureAsync(ICrudQueryExecutionContext context, Query query)
 {
     return(TaskUtils.AsCompletedTask(() => this.ExecuteProcedure(context, query)));
 }
Beispiel #30
0
 /// <summary>
 /// Executes query without fetching any data but schema. The implementation may be called by multiple threads and must be safe
 /// </summary>
 public abstract Schema GetSchema(ICrudQueryExecutionContext context, Query query);