コード例 #1
0
ファイル: CRUDGenerator.cs プロジェクト: yhhno/nfx
 public static int CRUDUpsert(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, FieldFilterFunc filter)
 {
     try
     {
     return crudUpsert(store, cnn, trans, row, filter);
     }
     catch(Exception error)
     {
        throw new MySQLDataAccessException(
                 StringConsts.CRUD_STATEMENT_EXECUTION_ERROR.Args("upsert", error.ToMessageWithType(), error),
                 error,
                 KeyViolationKind.Unspecified,
                 keyViolationName(error));
     }
 }
コード例 #2
0
 public int Upsert(Row row, FieldFilterFunc filter = null)
 {
     throw new NotImplementedException();
 }
コード例 #3
0
ファイル: CRUDTransaction.cs プロジェクト: itadapter/nfx
 protected abstract Task<int> DoUpsertAsync(Row row, FieldFilterFunc filter = null);
コード例 #4
0
ファイル: CRUDTransaction.cs プロジェクト: itadapter/nfx
 public Task<int> UpsertAsync(Row row, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Upsert");
             return DoUpsertAsync(row, filter);
 }
コード例 #5
0
 public Task <int> UpdateAsync(Doc row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     return(TaskUtils.AsCompletedTask(() => this.Update(row, key, filter)));
 }
コード例 #6
0
ファイル: CRUDTransaction.cs プロジェクト: dotnetchris/nfx
 protected abstract Task <int> DoUpdateAsync(Row row, IDataStoreKey key, FieldFilterFunc filter = null);
コード例 #7
0
ファイル: CRUDTransaction.cs プロジェクト: dotnetchris/nfx
 public Task <int> UpdateAsync(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Update");
     return(DoUpdateAsync(row, key, filter));
 }
コード例 #8
0
        /// <summary>
        /// Converts row to BSON document suitable for storage in MONGO.DB.
        /// Pass target name (name of particular store/epoch/implementation) to get targeted field metadata.
        /// Note: the supplied row MAY NOT CONTAIN REFERENCE CYCLES - either direct or transitive
        /// </summary>
        public virtual BSONDocument RowToBSONDocument(Row row, string targetName, bool useAmorphousData = true, FieldFilterFunc filter = null)
        {
            var el = RowToBSONDocumentElement(row, targetName, useAmorphousData, filter: filter);

            return(el.Value);
        }
コード例 #9
0
ファイル: MySQLDataStore.cs プロジェクト: yhhno/nfx
 public int Update(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     using (var cnn = GetConnection())
       return DoUpdate(cnn,  null, row, key, filter);
 }
コード例 #10
0
ファイル: MongoDBDataStore.cs プロジェクト: itadapter/nfx
        private BSONDocument convertRowToBSONDocumentWith_ID(Row row, string operation, FieldFilterFunc filter = null)
        {
            var result = m_Converter.RowToBSONDocument(row, this.TargetName, filter: filter);

            if (result[Connector.Protocol._ID]==null)
             throw new MongoDBDataAccessException(StringConsts.OP_ROW_NO_PK_ID_ERROR.Args(row.Schema.Name, Connector.Protocol._ID, operation));

            return result;
        }
コード例 #11
0
ファイル: MongoDBDataStore.cs プロジェクト: itadapter/nfx
        protected virtual int DoUpsert(Connector.Database db, Row row, FieldFilterFunc filter = null)
        {
            var doc = convertRowToBSONDocumentWith_ID(row, "upsert", filter);

              var tname = GetCollectionName(row.Schema);

              var collection = db[tname];

              var result = collection.Save(doc);

              checkCRUDResult(result, row.Schema.Name, "upsert");

              return result.TotalDocumentsAffected;
        }
コード例 #12
0
ファイル: MongoDBDataStore.cs プロジェクト: itadapter/nfx
        protected virtual int DoUpdate(Connector.Database db, Row row, IDataStoreKey key, FieldFilterFunc filter = null)
        {
            var doc = convertRowToBSONDocumentWith_ID(row, "update", filter);
              var _id = doc[Connector.Protocol._ID];

              //20160212 spol
              if (filter != null)
              {
            doc.Delete(Connector.Protocol._ID);
            if (doc.Count == 0) return 0; // nothing to update
            var wrapDoc = new BSONDocument();
            wrapDoc.Set(new BSONDocumentElement(Connector.Protocol.SET, doc));
            doc = wrapDoc;
              }

              var tname = GetCollectionName(row.Schema);

              var collection = db[tname];

              var qry = new Connector.Query();
              qry.Set( _id );
              var upd = new Connector.UpdateEntry(qry, doc, false, false);

              var result = collection.Update( upd );

              checkCRUDResult(result, row.Schema.Name, "update");

              return result.TotalDocumentsAffected;
        }
コード例 #13
0
ファイル: MongoDBDataStore.cs プロジェクト: itadapter/nfx
 public virtual int Upsert(Row row, FieldFilterFunc filter = null)
 {
     var db = GetDatabase();
     return DoUpsert(db, row, filter);
 }
コード例 #14
0
ファイル: MongoDBDataStore.cs プロジェクト: itadapter/nfx
 public virtual int Update(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     var db = GetDatabase();
     return DoUpdate(db, row, key, filter);
 }
コード例 #15
0
 public Task<int> UpsertAsync(Row row, FieldFilterFunc filter = null)
 {
     throw new NotImplementedException();
 }
コード例 #16
0
 protected override int DoUpsert(Row row, FieldFilterFunc filter = null)
 {
     return(Store.DoUpsert(m_Connection, m_Transaction, row, filter));
 }
コード例 #17
0
 protected override int DoUpdate(Row row, IDataStoreKey key, FieldFilterFunc filter = null)
 {
     return(Store.DoUpdate(m_Connection, m_Transaction, row, key, filter));
 }
コード例 #18
0
ファイル: MySQLDataStore.cs プロジェクト: yhhno/nfx
 public Task<int> UpdateAsync(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     return TaskUtils.AsCompletedTask( () => this.Update(row, key, filter) );
 }
コード例 #19
0
ファイル: CRUDTransaction.cs プロジェクト: dotnetchris/nfx
 public int Upsert(Row row, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Upsert");
     return(DoUpsert(row, filter));
 }
コード例 #20
0
ファイル: MySQLDataStore.cs プロジェクト: yhhno/nfx
 public int Upsert(Row row, FieldFilterFunc filter = null)
 {
     using (var cnn = GetConnection())
       return DoUpsert(cnn,  null, row, filter);
 }
コード例 #21
0
ファイル: CRUDTransaction.cs プロジェクト: dotnetchris/nfx
 protected abstract Task <int> DoUpsertAsync(Row row, FieldFilterFunc filter = null);
コード例 #22
0
ファイル: MySQLDataStore.cs プロジェクト: yhhno/nfx
 public Task<int> UpsertAsync(Row row, FieldFilterFunc filter = null)
 {
     return TaskUtils.AsCompletedTask( () => this.Upsert(row, filter) );
 }
コード例 #23
0
 public Task <int> UpsertAsync(Doc row, FieldFilterFunc filter = null)
 {
     return(TaskUtils.AsCompletedTask(() => this.Upsert(row, filter)));
 }
コード例 #24
0
ファイル: MySQLDataStore.cs プロジェクト: yhhno/nfx
 /// <summary>
 /// Performs CRUD row update. Override to do custom update
 /// </summary>
 protected internal virtual int DoUpdate(MySqlConnection cnn, MySqlTransaction transaction, Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     checkReadOnly(row.Schema, "update");
     return CRUDGenerator.CRUDUpdate(this, cnn, transaction, row, key, filter);
 }
コード例 #25
0
ファイル: CRUDTransaction.cs プロジェクト: itadapter/nfx
 public Task<int> UpdateAsync(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Update");
             return DoUpdateAsync(row, key, filter);
 }
コード例 #26
0
ファイル: MySQLDataStore.cs プロジェクト: yhhno/nfx
 /// <summary>
 /// Performs CRUD row upsert. Override to do custom upsertion
 /// </summary>
 protected internal virtual int DoUpsert(MySqlConnection cnn, MySqlTransaction transaction, Row row, FieldFilterFunc filter = null)
 {
     checkReadOnly(row.Schema, "upsert");
     return CRUDGenerator.CRUDUpsert(this, cnn, transaction, row, filter);
 }
コード例 #27
0
ファイル: CRUDTransaction.cs プロジェクト: itadapter/nfx
 protected abstract Task<int> DoUpdateAsync(Row row, IDataStoreKey key, FieldFilterFunc filter = null);
コード例 #28
0
ファイル: MySQLCRUDTransaction.cs プロジェクト: yhhno/nfx
 protected override int DoUpdate(Row row, IDataStoreKey key, FieldFilterFunc filter = null)
 {
     return Store.DoUpdate(m_Connection, m_Transaction, row, key, filter);
 }
コード例 #29
0
ファイル: CRUDGenerator.cs プロジェクト: yhhno/nfx
        private static int crudUpsert(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, FieldFilterFunc filter)
        {
            var target = store.TargetName;
              var cnames = new StringBuilder();
              var values = new StringBuilder();
              var upserts = new StringBuilder();
              var vparams = new List<MySqlParameter>();
              var vpidx = 0;
              foreach (var fld in row.Schema.FieldDefs)
              {
            var fattr = fld[target];
            if (fattr==null) continue;

            if (fattr.StoreFlag != StoreFlag.LoadAndStore && fattr.StoreFlag != StoreFlag.OnlyStore) continue;

            if (filter!=null)//20160210 Dkh+SPol
            {
              if (!filter(row, null, fld)) continue;
            }

            var fname = fld.GetBackendNameForTarget(target);

            var fvalue = getFieldValue(row, fld.Order, store);

            cnames.AppendFormat(" `{0}`,", fname);

            if ( fvalue != null)
            {
                var pname = string.Format("?VAL{0}", vpidx);

                values.AppendFormat(" {0},", pname);

                if (!fattr.Key)
                    upserts.AppendFormat(" `{0}` = {1},", fname, pname);

                var par = new MySqlParameter();
                par.ParameterName = pname;
                par.Value = fvalue;
                vparams.Add(par);

                vpidx++;
            }
            else
            {
                values.Append(" NULL,");
                upserts.AppendFormat(" `{0}` = NULL,", fname);
            }
              }//foreach

              if (cnames.Length > 0)
              {
            cnames.Remove(cnames.Length - 1, 1);// remove ","
            upserts.Remove(upserts.Length - 1, 1);// remove ","
            values.Remove(values.Length - 1, 1);// remove ","
              }
              else
            return 0;//nothing to do

              string tableName = getTableName(row.Schema, target);

              using(var cmd = cnn.CreateCommand())
              {
            var sql =
            @"INSERT INTO `{0}` ({1}) VALUES ({2}) ON DUPLICATE KEY UPDATE {3}".Args( tableName, cnames, values, upserts);

            cmd.Transaction = trans;
            cmd.CommandText = sql;
            cmd.Parameters.AddRange(vparams.ToArray());
            ConvertParameters(store, cmd.Parameters);

            try
            {
            var affected = cmd.ExecuteNonQuery();
            GeneratorUtils.LogCommand(store.LogLevel, "upsert-ok", cmd, null);
            return affected;
            }
            catch(Exception error)
            {
            GeneratorUtils.LogCommand(store.LogLevel, "upsert-error", cmd, error);
            throw;
            }
              }//using command
        }
コード例 #30
0
ファイル: MySQLCRUDTransaction.cs プロジェクト: yhhno/nfx
 protected override Task<int> DoUpdateAsync(Row row, IDataStoreKey key, FieldFilterFunc filter = null)
 {
     return TaskUtils.AsCompletedTask( () => this.DoUpdate(row, key, filter) );
 }
コード例 #31
0
 protected abstract Task <int> DoUpsertAsync(Doc doc, FieldFilterFunc filter = null);
コード例 #32
0
ファイル: MySQLCRUDTransaction.cs プロジェクト: yhhno/nfx
 protected override int DoUpsert(Row row, FieldFilterFunc filter = null)
 {
     return Store.DoUpsert(m_Connection, m_Transaction, row, filter);
 }
コード例 #33
0
 protected override Task <int> DoUpsertAsync(Row row, FieldFilterFunc filter = null)
 {
     return(TaskUtils.AsCompletedTask(() => this.DoUpsert(row, filter)));
 }
コード例 #34
0
ファイル: MySQLCRUDTransaction.cs プロジェクト: yhhno/nfx
 protected override Task<int> DoUpsertAsync(Row row, FieldFilterFunc filter = null)
 {
     return TaskUtils.AsCompletedTask( () => this.DoUpsert(row, filter) );
 }
コード例 #35
0
 protected override Task <int> DoUpdateAsync(Row row, IDataStoreKey key, FieldFilterFunc filter = null)
 {
     return(TaskUtils.AsCompletedTask(() => this.DoUpdate(row, key, filter)));
 }
コード例 #36
0
        public virtual int Update(Doc row, IDataStoreKey key = null, FieldFilterFunc filter = null)
        {
            var db = GetDatabase();

            return(DoUpdate(db, row, key, filter));
        }
コード例 #37
0
        /// <summary>
        /// Converts row to BSON document suitable for storage in MONGO.DB.
        /// Pass target name (name of particular store/epoch/implementation) to get targeted field metadata.
        /// Note: the supplied row MAY NOT CONTAIN REFERENCE CYCLES - either direct or transitive
        /// </summary>
        public virtual BSONDocumentElement RowToBSONDocumentElement(Row row, string targetName, bool useAmorphousData = true, string name = null, FieldFilterFunc filter = null)
        {
            if (row == null)
            {
                return(null);
            }

            var amrow = row as IAmorphousData;

            if (amrow != null && useAmorphousData && amrow.AmorphousDataEnabled)
            {
                amrow.BeforeSave(targetName);
            }

            var result = new BSONDocument();

            foreach (var field in row.Schema)
            {
                var attr = field[targetName];
                if (attr != null && attr.StoreFlag != StoreFlag.OnlyStore && attr.StoreFlag != StoreFlag.LoadAndStore)
                {
                    continue;
                }

                if (filter != null)//20160210 Dkh+SPol
                {
                    if (!filter(row, null, field))
                    {
                        continue;
                    }
                }

                var el = GetFieldAsBSON(row, field, targetName);
                result.Set(el);
            }

            if (amrow != null && useAmorphousData && amrow.AmorphousDataEnabled)
            {
                foreach (var kvp in amrow.AmorphousData)
                {
                    result.Set(GetAmorphousFieldAsBSON(kvp, targetName));
                }
            }

            return(name != null ? new BSONDocumentElement(name, result) : new BSONDocumentElement(result));
        }
コード例 #38
0
        protected virtual int DoUpdate(Connector.Database db, Doc row, IDataStoreKey key, FieldFilterFunc filter = null)
        {
            var doc = convertDocToBSONDocumentWith_ID(row, "update", filter);
            var _id = doc[Connector.Protocol._ID];

            doc.Delete(Connector.Protocol._ID);
            if (doc.Count == 0)
            {
                return(0);              // nothing to update
            }
            //20160212 spol
            if (filter != null)
            {
                var wrapDoc = new BSONDocument();
                wrapDoc.Set(new BSONDocumentElement(Connector.Protocol.SET, doc));
                doc = wrapDoc;
            }

            var tname = GetCollectionName(row.Schema);

            var collection = db[tname];

            var qry = new Connector.Query();

            qry.Set(_id);
            var upd = new Connector.UpdateEntry(qry, doc, false, false);

            var result = collection.Update(upd);

            CheckCRUDResult(result, row.Schema.Name, "update");

            return(result.TotalDocumentsAffected);
        }
コード例 #39
0
ファイル: CRUDTransaction.cs プロジェクト: dotnetchris/nfx
 public Task <int> UpsertAsync(Row row, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Upsert");
     return(DoUpsertAsync(row, filter));
 }
コード例 #40
0
        private BSONDocument convertDocToBSONDocumentWith_ID(Doc doc, string operation, FieldFilterFunc filter = null)
        {
            var result = m_Converter.DataDocToBSONDocument(doc, this.TargetName, filter: filter);

            if (result[Connector.Protocol._ID] == null)
            {
                throw new MongoDbDataAccessException(StringConsts.OP_ROW_NO_PK_ID_ERROR.Args(doc.Schema.Name, Connector.Protocol._ID, operation));
            }

            return(result);
        }
コード例 #41
0
ファイル: CRUDTransaction.cs プロジェクト: dotnetchris/nfx
 protected abstract int  DoUpsert(Row row, FieldFilterFunc filter            = null);
コード例 #42
0
ファイル: CRUDGenerator.cs プロジェクト: cyecp/nfx
        private static int crudUpdate(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key, FieldFilterFunc filter)
        {
            var target  = store.TargetName;
            var values  = new StringBuilder();
            var vparams = new List <MySqlParameter>();
            var vpidx   = 0;

            foreach (var fld in row.Schema.FieldDefs)
            {
                var fattr = fld[target];
                if (fattr == null)
                {
                    continue;
                }

                var fname = fld.GetBackendNameForTarget(target);

                //20141008 DKh Skip update of key fields
                //20160124 DKh add update of keys if IDataStoreKey is present
                if (fattr.Key && !GeneratorUtils.HasFieldInNamedKey(fname, key))
                {
                    continue;
                }

                if (fattr.StoreFlag != StoreFlag.LoadAndStore && fattr.StoreFlag != StoreFlag.OnlyStore)
                {
                    continue;
                }

                if (filter != null)//20160210 Dkh+SPol
                {
                    if (!filter(row, key, fld))
                    {
                        continue;
                    }
                }


                var fvalue = getFieldValue(row, fld.Order, store);


                if (fvalue != null)
                {
                    var pname = string.Format("?VAL{0}", vpidx);

                    values.AppendFormat(" `{0}` = {1},", fname, pname);

                    var par = new MySqlParameter();
                    par.ParameterName = pname;
                    par.Value         = fvalue;
                    vparams.Add(par);

                    vpidx++;
                }
                else
                {
                    values.AppendFormat(" `{0}` = NULL,", fname);
                }
            }//foreach

            if (values.Length > 0)
            {
                values.Remove(values.Length - 1, 1);// remove ","
            }
            else
            {
                return(0);//nothing to do
            }
            string tableName = getTableName(row.Schema, target);

            using (var cmd = cnn.CreateCommand())
            {
                var sql = string.Empty;

                var pk = key ?? row.GetDataStoreKey(target);

                if (pk == null)
                {
                    throw new MySQLDataAccessException(StringConsts.KEY_UNAVAILABLE_ERROR);
                }

                var where = GeneratorUtils.KeyToWhere(pk, cmd.Parameters);

                if (!string.IsNullOrEmpty(where))
                {
                    sql = "UPDATE `{0}` T1  SET {1} WHERE {2}".Args(tableName, values, where);
                }
                else
                {
                    throw new MySQLDataAccessException(StringConsts.BROAD_UPDATE_ERROR);//20141008 DKh BROAD update
                }
                cmd.Transaction = trans;
                cmd.CommandText = sql;
                cmd.Parameters.AddRange(vparams.ToArray());
                ConvertParameters(store, cmd.Parameters);

                try
                {
                    var affected = cmd.ExecuteNonQuery();
                    GeneratorUtils.LogCommand(store.LogLevel, "update-ok", cmd, null);
                    return(affected);
                }
                catch (Exception error)
                {
                    GeneratorUtils.LogCommand(store.LogLevel, "update-error", cmd, error);
                    throw;
                }
            }//using command
        }
コード例 #43
0
ファイル: CRUDTransaction.cs プロジェクト: dotnetchris/nfx
 protected abstract int  DoUpdate(Row row, IDataStoreKey key, FieldFilterFunc filter            = null);
コード例 #44
0
ファイル: CRUDGenerator.cs プロジェクト: cyecp/nfx
        private static int crudUpsert(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, FieldFilterFunc filter)
        {
            var target  = store.TargetName;
            var cnames  = new StringBuilder();
            var values  = new StringBuilder();
            var upserts = new StringBuilder();
            var vparams = new List <MySqlParameter>();
            var vpidx   = 0;

            foreach (var fld in row.Schema.FieldDefs)
            {
                var fattr = fld[target];
                if (fattr == null)
                {
                    continue;
                }

                if (fattr.StoreFlag != StoreFlag.LoadAndStore && fattr.StoreFlag != StoreFlag.OnlyStore)
                {
                    continue;
                }


                if (filter != null)//20160210 Dkh+SPol
                {
                    if (!filter(row, null, fld))
                    {
                        continue;
                    }
                }

                var fname = fld.GetBackendNameForTarget(target);

                var fvalue = getFieldValue(row, fld.Order, store);


                cnames.AppendFormat(" `{0}`,", fname);

                if (fvalue != null)
                {
                    var pname = string.Format("?VAL{0}", vpidx);

                    values.AppendFormat(" {0},", pname);

                    if (!fattr.Key)
                    {
                        upserts.AppendFormat(" `{0}` = {1},", fname, pname);
                    }

                    var par = new MySqlParameter();
                    par.ParameterName = pname;
                    par.Value         = fvalue;
                    vparams.Add(par);

                    vpidx++;
                }
                else
                {
                    values.Append(" NULL,");
                    upserts.AppendFormat(" `{0}` = NULL,", fname);
                }
            }//foreach

            if (cnames.Length > 0 && upserts.Length > 0)
            {
                cnames.Remove(cnames.Length - 1, 1);   // remove ","
                upserts.Remove(upserts.Length - 1, 1); // remove ","
                values.Remove(values.Length - 1, 1);   // remove ","
            }
            else
            {
                return(0);//nothing to do
            }
            string tableName = getTableName(row.Schema, target);

            using (var cmd = cnn.CreateCommand())
            {
                var sql =
                    @"INSERT INTO `{0}` ({1}) VALUES ({2}) ON DUPLICATE KEY UPDATE {3}".Args(tableName, cnames, values, upserts);

                cmd.Transaction = trans;
                cmd.CommandText = sql;
                cmd.Parameters.AddRange(vparams.ToArray());
                ConvertParameters(store, cmd.Parameters);

                try
                {
                    var affected = cmd.ExecuteNonQuery();
                    GeneratorUtils.LogCommand(store.LogLevel, "upsert-ok", cmd, null);
                    return(affected);
                }
                catch (Exception error)
                {
                    GeneratorUtils.LogCommand(store.LogLevel, "upsert-error", cmd, error);
                    throw;
                }
            }//using command
        }
コード例 #45
0
 public int Upsert(Doc row, FieldFilterFunc filter = null)
 {
     using (var cnn = GetConnection())
         return(DoUpsert(cnn, null, row, filter));
 }
コード例 #46
0
ファイル: CRUDGenerator.cs プロジェクト: cyecp/nfx
 public static int CRUDUpsert(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, FieldFilterFunc filter)
 {
     try
     {
         return(crudUpsert(store, cnn, trans, row, filter));
     }
     catch (Exception error)
     {
         throw new MySQLDataAccessException(
                   StringConsts.CRUD_STATEMENT_EXECUTION_ERROR.Args("upsert", error.ToMessageWithType(), error),
                   error,
                   KeyViolationKind.Unspecified,
                   KeyViolationName(error));
     }
 }
コード例 #47
0
 public int Update(Doc row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     using (var cnn = GetConnection())
         return(DoUpdate(cnn, null, row, key, filter));
 }
コード例 #48
0
ファイル: DataDocConverter.cs プロジェクト: lulzzz/azos
        /// <summary>
        /// Converts row to BSON document suitable for storage in MONGO.DB.
        /// Pass target name (name of particular store/epoch/implementation) to get targeted field metadata.
        /// Note: the supplied row MAY NOT CONTAIN REFERENCE CYCLES - either direct or transitive
        /// </summary>
        public virtual BSONDocument DataDocToBSONDocument(Doc doc, string targetName, bool useAmorphousData = true, FieldFilterFunc filter = null)
        {
            var el = DataDocToBSONDocumentElement(doc, targetName, useAmorphousData, filter: filter);

            return(el.Value);
        }
コード例 #49
0
 /// <summary>
 /// Performs CRUD row upsert. Override to do custom upsertion
 /// </summary>
 protected internal virtual int DoUpsert(MySqlConnection cnn, MySqlTransaction transaction, Doc row, FieldFilterFunc filter = null)
 {
     checkReadOnly(row.Schema, "upsert");
     return(CRUDGenerator.CRUDUpsert(this, cnn, transaction, row, filter));
 }
コード例 #50
0
ファイル: RowConverter.cs プロジェクト: itadapter/nfx
 /// <summary>
 /// Converts row to BSON document suitable for storage in MONGO.DB.
 /// Pass target name (name of particular store/epoch/implementation) to get targeted field metadata.
 /// Note: the supplied row MAY NOT CONTAIN REFERENCE CYCLES - either direct or transitive
 /// </summary>
 public virtual BSONDocument RowToBSONDocument(Row row, string targetName, bool useAmorphousData = true, FieldFilterFunc filter = null)
 {
   var el = RowToBSONDocumentElement(row, targetName, useAmorphousData, filter: filter);
   return el.Value;
 }
コード例 #51
0
ファイル: CRUDTransaction.cs プロジェクト: itadapter/nfx
 public int Upsert(Row row, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Upsert");
             return DoUpsert(row, filter);
 }
コード例 #52
0
ファイル: RowConverter.cs プロジェクト: itadapter/nfx
      /// <summary>
      /// Converts row to BSON document suitable for storage in MONGO.DB.
      /// Pass target name (name of particular store/epoch/implementation) to get targeted field metadata.
      /// Note: the supplied row MAY NOT CONTAIN REFERENCE CYCLES - either direct or transitive
      /// </summary>
      public virtual BSONDocumentElement RowToBSONDocumentElement(Row row, string targetName, bool useAmorphousData = true, string name= null, FieldFilterFunc filter = null)
      {
        if (row==null) return null;

        var amrow = row as IAmorphousData;
        if (amrow!=null && useAmorphousData && amrow.AmorphousDataEnabled)
        {
            amrow.BeforeSave(targetName);
        }

        var result = new BSONDocument();
        foreach(var field in row.Schema)
        {
            var attr = field[targetName];
            if (attr!=null && attr.StoreFlag!=StoreFlag.OnlyStore && attr.StoreFlag!=StoreFlag.LoadAndStore) continue;

            if (filter!=null)//20160210 Dkh+SPol
            {
              if (!filter(row, null, field)) continue;
            }

            var el = GetFieldAsBSON(row, field, targetName);
            result.Set( el );
        }

        if (amrow!=null && useAmorphousData && amrow.AmorphousDataEnabled)
          foreach(var kvp in amrow.AmorphousData)
          {
            result.Set( GetAmorphousFieldAsBSON(kvp, targetName) );
          }

        return name != null ? new BSONDocumentElement(name, result) : new BSONDocumentElement(result);
      }
コード例 #53
0
ファイル: CRUDTransaction.cs プロジェクト: itadapter/nfx
 protected abstract int DoUpdate(Row row, IDataStoreKey key, FieldFilterFunc filter = null);
コード例 #54
0
 public Task <int> InsertAsync(Doc doc, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Insert");
     return(DoInsertAsync(doc, filter));
 }
コード例 #55
0
ファイル: CRUDTransaction.cs プロジェクト: itadapter/nfx
 protected abstract int DoUpsert(Row row, FieldFilterFunc filter = null);
コード例 #56
0
 public int Upsert(Doc doc, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Upsert");
     return(DoUpsert(doc, filter));
 }
コード例 #57
0
ファイル: CRUDGenerator.cs プロジェクト: yhhno/nfx
        private static int crudUpdate(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key, FieldFilterFunc filter)
        {
            var target = store.TargetName;
              var values = new StringBuilder();
              var vparams = new List<MySqlParameter>();
              var vpidx = 0;
              foreach (var fld in row.Schema.FieldDefs)
              {
            var fattr = fld[target];
            if (fattr==null) continue;

            var fname = fld.GetBackendNameForTarget(target);

            //20141008 DKh Skip update of key fields
            //20160124 DKh add update of keys if IDataStoreKey is present
            if (fattr.Key && !GeneratorUtils.HasFieldInNamedKey(fname, key)) continue;

            if (fattr.StoreFlag != StoreFlag.LoadAndStore && fattr.StoreFlag != StoreFlag.OnlyStore) continue;

            if (filter!=null)//20160210 Dkh+SPol
            {
              if (!filter(row, key, fld)) continue;
            }

            var fvalue = getFieldValue(row, fld.Order, store);

            if ( fvalue != null)
            {
                var pname = string.Format("?VAL{0}", vpidx);

                values.AppendFormat(" `{0}` = {1},", fname, pname);

                var par = new MySqlParameter();
                par.ParameterName = pname;
                par.Value = fvalue;
                vparams.Add(par);

                vpidx++;
            }
            else
            {
                values.AppendFormat(" `{0}` = NULL,", fname);
            }
              }//foreach

              if (values.Length > 0)
              {
            values.Remove(values.Length - 1, 1);// remove ","
              }
              else
            return 0;//nothing to do

              string tableName = getTableName(row.Schema, target);

              using(var cmd = cnn.CreateCommand())
              {
            var sql = string.Empty;

            var pk = key ?? row.GetDataStoreKey(target);

            if (pk == null)
            throw new MySQLDataAccessException(StringConsts.KEY_UNAVAILABLE_ERROR);

            var where = GeneratorUtils.KeyToWhere(pk, cmd.Parameters);

            if (!string.IsNullOrEmpty(where))
            sql = "UPDATE `{0}` T1  SET {1} WHERE {2}".Args( tableName, values, where);
            else
            throw new MySQLDataAccessException(StringConsts.BROAD_UPDATE_ERROR);//20141008 DKh BROAD update

            cmd.Transaction = trans;
            cmd.CommandText = sql;
            cmd.Parameters.AddRange(vparams.ToArray());
            ConvertParameters(store, cmd.Parameters);

            try
            {
            var affected = cmd.ExecuteNonQuery();
            GeneratorUtils.LogCommand(store.LogLevel, "update-ok", cmd, null);
            return affected;
            }
            catch(Exception error)
            {
            GeneratorUtils.LogCommand(store.LogLevel, "update-error", cmd, error);
            throw;
            }
              }//using command
        }
コード例 #58
0
 public int Update(Doc doc, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Update");
     return(DoUpdate(doc, key, filter));
 }
コード例 #59
0
 protected abstract int DoUpsert(Doc doc, FieldFilterFunc filter             = null);
コード例 #60
0
 public Task<int> UpdateAsync(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     throw new NotImplementedException();
 }