Пример #1
0
        public static void Delete(MySQLDataStoreBase store, MySqlConnection cnn, ModelBase instance, IDataStoreKey key, object[] extra)
        {
            var record = GeneratorUtils.AsSuitableRecordInstance(instance, true);

              using (var cmd = cnn.CreateCommand())
              {
            var pk = key ?? record.DataStoreKey;

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

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

              if (!string.IsNullOrEmpty(where))
            cmd.CommandText = string.Format("DELETE T1 FROM `{0}` T1 WHERE {1}", record.TableName, where);
              else
            cmd.CommandText = string.Format("DELETE T1 FROM `{0}` T1", record.TableName);

            var affected = 0;
            try
            {
            affected = cmd.ExecuteNonQuery();
            GeneratorUtils.LogCommand(store.LogLevel, "rmdelete-ok", cmd, null);
            }
            catch(Exception error)
            {
            GeneratorUtils.LogCommand(store.LogLevel, "rmdelete-error", cmd, error);
            throw;
            }

            if (affected == 0)
              throw new MySQLDataAccessException(string.Format(StringConsts.NO_ROWS_AFFECTED_ERROR, "Delete"));

              }//using command
        }
Пример #2
0
        /// <summary>
        /// Auto generates select sql and params. If sqlStatement!=null then params are added to that statement
        /// </summary>
        public static void Load(MySQLDataStoreBase store, MySqlConnection cnn, string sqlStatement, ModelBase instance, IDataStoreKey key, object[] extra)
        {
            var autoSql = string.IsNullOrEmpty(sqlStatement);

            var record = GeneratorUtils.AsSuitableRecordInstance(instance, autoSql);

            var select = new StringBuilder();

              if (autoSql)
              {
            foreach (var fld in record.Fields)
              if (fld.StoreFlag == StoreFlag.LoadAndStore || fld.StoreFlag == StoreFlag.OnlyLoad)
            select.AppendFormat(" T1.`{0}`,", fld.FieldName);

            if (select.Length > 0)
              select.Remove(select.Length - 1, 1);// remove ","
            else throw new MySQLDataAccessException(StringConsts.LOAD_NO_SELECT_COLUMNS_ERROR);

              }

              var pk = key ?? record.DataStoreKey;

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

              using (var cmd = cnn.CreateCommand())
              {

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

            if (autoSql)
              cmd.CommandText = string.Format("SELECT {0} FROM `{1}` T1 WHERE {2}", select, record.TableName, where);
            else
              cmd.CommandText = string.Format(sqlStatement, where);

            MySqlDataReader reader = null;
            try
            {
            reader = cmd.ExecuteReader();
            GeneratorUtils.LogCommand(store.LogLevel, "rmload-ok", cmd, null);
            }
            catch(Exception error)
            {
            GeneratorUtils.LogCommand(store.LogLevel, "rmload-error", cmd, error);
            throw;
            }

            using (reader)
            {
              if (reader.Read())
            reader.CopyFieldsToRecordFields(record);
              else
            throw new MySQLDataAccessException(string.Format(StringConsts.LOADING_ENTITY_NOT_FOUND_ERROR, pk));
            }//using reader

              }//using command
        }
Пример #3
0
 public static int CRUDDelete(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key)
 {
     try
     {
     return crudDelete(store, cnn, trans, row, key);
     }
     catch(Exception error)
     {
        throw new MySQLDataAccessException(StringConsts.CRUD_STATEMENT_EXECUTION_ERROR.Args("delete", error.ToMessageWithType(), error), error);
     }
 }
Пример #4
0
        public static string KeyToWhere(IDataStoreKey key, MySqlParameterCollection parameters)
        {
            string where = null;

              if (key is CounterDataStoreKey)
              {
            where = "T1.COUNTER = ?CTR";
            var par = new MySqlParameter();
            par.ParameterName = "?CTR";
            par.Value = ((CounterDataStoreKey)key).Counter;

            parameters.Add(par);
              }
              else
              if (key is GDID)
              {
            where = "T1.GDID = ?CTR";
            var par = new MySqlParameter();
            par.ParameterName = "?CTR";
            par.Value = key;

            parameters.Add(par);
              }
              else
            if (key is NameValueDataStoreKey)
            {
              var dict = key as NameValueDataStoreKey;
              var s = new StringBuilder();
              var idx = 0;

              foreach (var e in dict)
              {
                s.AppendFormat(" (T1.`{0}` = ?P{1}) AND", e.Key, idx);
                var par = new MySqlParameter();
                par.ParameterName = "?P" + idx.ToString();
                par.Value = e.Value;
                parameters.Add(par);

                idx++;
              }

              if (s.Length > 0) s.Remove(s.Length - 3, 3);//cut "AND"

              where = s.ToString();
            }
            else
              throw new MySQLDataAccessException(StringConsts.INVALID_KEY_TYPE_ERROR);

              return where;
        }
Пример #5
0
 public static int CRUDUpdate(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key, FieldFilterFunc filter)
 {
     try
     {
     return crudUpdate(store, cnn, trans, row, key, filter);
     }
     catch(Exception error)
     {
        throw new MySQLDataAccessException(
                  StringConsts.CRUD_STATEMENT_EXECUTION_ERROR.Args("update",
                  error.ToMessageWithType(), error),
                  error,
                  KeyViolationKind.Unspecified,
                  keyViolationName(error)
                  );
     }
 }
Пример #6
0
        public static void Delete(SqlConnection cnn, ModelBase instance, IDataStoreKey key, object[] extra)
        {
            var record = asSuitableRecordInstance(instance, true);

              using (var cmd = cnn.CreateCommand())
              {
              var pk = key ?? record.DataStoreKey;

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

              var where = keyToWhere(pk, cmd.Parameters);

              if (!string.IsNullOrEmpty(where))
            cmd.CommandText = string.Format("DELETE T1 FROM [{0}] T1 WHERE {1}", record.TableName, where);
              else
            cmd.CommandText = string.Format("DELETE T1 FROM [{0}] T1", record.TableName);

             if (cmd.ExecuteNonQuery() == 0)
               throw new MsSQLDataAccessException(string.Format(StringConsts.NO_ROWS_AFFECTED_ERROR, "Delete"));

              }//using command
        }
Пример #7
0
 public static bool HasFieldInNamedKey(string fieldName, IDataStoreKey key)
 {
     var nvk = key as NameValueDataStoreKey;
       if (nvk==null || fieldName.IsNullOrWhiteSpace()) return false;
       return nvk.ContainsKey(fieldName);
 }
Пример #8
0
        public int Delete(Row row, IDataStoreKey key = null)
        {
            var db = GetDatabase();

            return(DoDelete(db, row, key));
        }
Пример #9
0
        private static int crudDelete(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key)
        {
            var target = store.TargetName;
              string tableName = getTableName(row.Schema, target);

              using (var cmd = cnn.CreateCommand())
              {
            var pk = key ?? row.GetDataStoreKey(target);

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

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

            cmd.Transaction = trans;
            if (!string.IsNullOrEmpty(where))
            cmd.CommandText = string.Format("DELETE T1 FROM `{0}` T1 WHERE {1}",tableName, where);
            else
            cmd.CommandText = string.Format("DELETE T1 FROM `{0}` T1", tableName);

            ConvertParameters(store, cmd.Parameters);

            try
            {
            var affected = cmd.ExecuteNonQuery();
            GeneratorUtils.LogCommand(store.LogLevel, "delete-ok", cmd, null);
            return affected;
            }
            catch(Exception error)
            {
            GeneratorUtils.LogCommand(store.LogLevel, "delete-error", cmd, error);
            throw;
            }

              }//using command
        }
Пример #10
0
 protected abstract int DoDelete(Row row, IDataStoreKey key);
Пример #11
0
 /// <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)
 {
     checkReadOnly(row.Schema, "update");
     return CRUDGenerator.CRUDUpdate(this, cnn, transaction, row, key);
 }
Пример #12
0
 public void Save(ModelBase instance, IDataStoreKey key, params object[] extra)
 {
     using (var cnn = GetConnection())
       DoSave(cnn, instance, key, extra);
 }
Пример #13
0
 public int Delete(Row row, IDataStoreKey key = null)
 {
     var db = GetDatabase();
     return DoDelete(db, row, key);
 }
Пример #14
0
 public async Task <int> DeleteAsync(Doc row, IDataStoreKey key = null)
 {
     using (var cnn = await GetConnection())
         return(await DoDeleteAsync(cnn, null, row, key));
 }
Пример #15
0
 public int Delete(Doc row, IDataStoreKey key = null)
 => DeleteAsync(row, key).GetAwaiter().GetResult();
Пример #16
0
 public async Task <int> UpdateAsync(Doc row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     using (var cnn = await GetConnection())
         return(await DoUpdateAsync(cnn, null, row, key, filter));
 }
Пример #17
0
 public int Update(Doc row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 => UpdateAsync(row, key, filter).GetAwaiter().GetResult();
Пример #18
0
 protected abstract Task <int> DoDeleteAsync(Doc doc, IDataStoreKey key);
Пример #19
0
 public virtual Task <int> DeleteAsync(Row row, IDataStoreKey key = null)
 {
     return(TaskUtils.AsCompletedTask(() => this.Delete(row, key)));
 }
Пример #20
0
 public int Delete(Row row, IDataStoreKey key = null)
 {
     using (var cnn = GetConnection())
       return DoDelete(cnn,  null, row);
 }
Пример #21
0
 protected override int DoDelete(Row row, IDataStoreKey key)
 {
     return Store.DoDelete(m_Connection, m_Transaction, row, key);
 }
Пример #22
0
 /// <summary>
 /// Performs CRUD row deletion. Override to do custom deletion
 /// </summary>
 protected internal virtual Task <int> DoDeleteAsync(SqlConnection cnn, SqlTransaction transaction, Doc row, IDataStoreKey key = null)
 => throw new NotImplementedException(StringConsts.CRUD_CAPABILITY_NOT_IMPLEMENETD_ERROR.Args(nameof(DoDeleteAsync),
                                                                                              GetType().FullName,
                                                                                              nameof(MsSqlCanonicalDataStore)));
Пример #23
0
        protected virtual int DoUpdate(Connector.Database db, Row row, IDataStoreKey key)
        {
          var doc = convertRowToBSONDocumentWith_ID(row, "update");
          
          var tname = GetCollectionName(row.Schema);
          
          var collection = db[tname]; 
          
          var qry = new Connector.Query();
          qry.Set( doc[Connector.Protocol._ID] );
          var upd = new Connector.UpdateEntry(qry, doc, false, false);

          var result = collection.Update( upd );

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

          return result.TotalDocumentsAffected;
        }
Пример #24
0
 //todo: Implement filter
 public virtual int Update(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     CheckServiceActive();
     return(CRUDWrite(row));
 }
Пример #25
0
 public Task<int> UpdateAsync(Row row, IDataStoreKey key = null)
 {
     return TaskUtils.AsCompletedTask( () => this.Update(row, key) );
 }
Пример #26
0
 //todo: Implement filter
 public virtual Task <int> UpdateAsync(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     CheckServiceActive();
     return(TaskUtils.AsCompletedTask(() => Update(row)));
 }
Пример #27
0
 public Task<int> DeleteAsync(Row row, IDataStoreKey key = null)
 {
     CheckOpenStatus("Delete");
             return DoDeleteAsync(row, key);
 }
Пример #28
0
 public virtual int Delete(Row row, IDataStoreKey key = null)
 {
     CheckServiceActive();
     return(CRUDWrite(row, true));
 }
Пример #29
0
 protected abstract int DoUpdate(Row row, IDataStoreKey key, FieldFilterFunc filter = null);
Пример #30
0
 public virtual Task <int> DeleteAsync(Row row, IDataStoreKey key = null)
 {
     CheckServiceActive();
     return(TaskUtils.AsCompletedTask(() => Delete(row)));
 }
Пример #31
0
 public Query(string name, IDataStoreKey key, Type resultRowType = null) : this(null, name, key, resultRowType)
 {
 }
Пример #32
0
 public int Delete(Row row, IDataStoreKey key = null)
 {
     using (var cnn = GetConnection())
         return(DoDelete(cnn, null, row));
 }
Пример #33
0
 /// <summary>
 /// Performs delete per model instance  from MySQL server by generating appropriate SQL statement automatically
 /// Override to do custom deletion for particular model instance
 /// </summary>
 protected internal virtual void DoDelete(MySqlConnection cnn, ModelBase instance, IDataStoreKey key, object[] extra)
 {
     RecordModelGenerator.Delete(this, cnn, instance, key, extra);
 }
Пример #34
0
 /// <summary>
 /// Performs CRUD row deletion. Override to do custom deletion
 /// </summary>
 protected internal virtual int DoDelete(MySqlConnection cnn, MySqlTransaction transaction, Row row, IDataStoreKey key = null)
 {
     checkReadOnly(row.Schema, "delete");
     return(CRUDGenerator.CRUDDelete(this, cnn, transaction, row, key));
 }
Пример #35
0
 public RowChange(RowChangeType type, Row row, IDataStoreKey key)
 {
     ChangeType = type;
     Row        = row;
     Key        = key;
 }
Пример #36
0
 public void Delete(ModelBase instance, IDataStoreKey key, params object[] extra)
 {
     using (var cnn = GetConnection())
         DoDelete(cnn, instance, key, extra);
 }
Пример #37
0
 public RowChange(RowChangeType type, Row row, IDataStoreKey key)
 {
     ChangeType = type;
     Row = row;
     Key = key;
 }
Пример #38
0
        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
        }
Пример #39
0
 public virtual int Update(Row row, IDataStoreKey key = null)
 {
     var db = GetDatabase();
     return DoUpdate(db, row, key);
 }
Пример #40
0
        private static int crudDelete(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key)
        {
            var    target    = store.TargetName;
            string tableName = getTableName(row.Schema, target);

            using (var cmd = cnn.CreateCommand())
            {
                var pk = key ?? row.GetDataStoreKey(target);

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

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

                cmd.Transaction = trans;
                if (!string.IsNullOrEmpty(where))
                {
                    cmd.CommandText = string.Format("DELETE T1 FROM `{0}` T1 WHERE {1}", tableName, where);
                }
                else
                {
                    cmd.CommandText = string.Format("DELETE T1 FROM `{0}` T1", tableName);
                }

                ConvertParameters(store, cmd.Parameters);

                try
                {
                    var affected = cmd.ExecuteNonQuery();
                    GeneratorUtils.LogCommand(store.LogLevel, "delete-ok", cmd, null);
                    return(affected);
                }
                catch (Exception error)
                {
                    GeneratorUtils.LogCommand(store.LogLevel, "delete-error", cmd, error);
                    throw;
                }
            }//using command
        }
Пример #41
0
 public virtual Task<int> DeleteAsync(Row row, IDataStoreKey key = null)
 {
     return TaskUtils.AsCompletedTask( () => this.Delete(row, key) );
 }
Пример #42
0
 public static int CRUDUpdate(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key, FieldFilterFunc filter)
 {
     try
     {
         return(crudUpdate(store, cnn, trans, row, key, filter));
     }
     catch (Exception error)
     {
         throw new MySQLDataAccessException(
                   StringConsts.CRUD_STATEMENT_EXECUTION_ERROR.Args("update",
                                                                    error.ToMessageWithType(), error),
                   error,
                   KeyViolationKind.Unspecified,
                   keyViolationName(error)
                   );
     }
 }
Пример #43
0
        protected virtual int DoDelete(Connector.Database db, Row row, IDataStoreKey key)
        {
          var doc = convertRowToBSONDocumentWith_ID(row, "delete");
          
          var tname = GetCollectionName(row.Schema);
          
          var collection = db[tname]; 
          
          var qry = new Connector.Query();
          qry.Set( doc[Connector.Protocol._ID] );

          var result = collection.Delete( new Connector.DeleteEntry( qry, Connector.DeleteLimit.OnlyFirstMatch) );
         
          checkCRUDResult(result, row.Schema.Name, "delete");

          return result.TotalDocumentsAffected;
        }
Пример #44
0
 public static int CRUDDelete(MySQLDataStoreBase store, MySqlConnection cnn, MySqlTransaction trans, Row row, IDataStoreKey key)
 {
     try
     {
         return(crudDelete(store, cnn, trans, row, key));
     }
     catch (Exception error)
     {
         throw new MySQLDataAccessException(StringConsts.CRUD_STATEMENT_EXECUTION_ERROR.Args("delete", error.ToMessageWithType(), error), error);
     }
 }
Пример #45
0
 public int Update(Row row, IDataStoreKey key = null)
 {
     using (var cnn = GetConnection())
       return DoUpdate(cnn,  null, row, key);
 }
Пример #46
0
 public Task <int> UpdateAsync(Doc doc, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Update");
     return(DoUpdateAsync(doc, key, filter));
 }
Пример #47
0
 /// <summary>
 /// Performs model save into MySQL server by generating appropriate SQL statement automatically
 /// Override to do custom saving for particular model instance
 /// </summary>
 protected internal virtual void DoSave(MySqlConnection cnn, ModelBase instance, IDataStoreKey key, object[] extra)
 {
     RecordModelGenerator.Save(this, cnn, instance, key, extra);
 }
Пример #48
0
 public int Delete(Doc doc, IDataStoreKey key = null)
 {
     CheckOpenStatus("Delete");
     return(DoDelete(doc, key));
 }
Пример #49
0
 public int Delete(Row row, IDataStoreKey key = null)
 {
     CheckOpenStatus("Delete");
             return DoDelete(row, key);
 }
Пример #50
0
 public Task <int> DeleteAsync(Doc doc, IDataStoreKey key = null)
 {
     CheckOpenStatus("Delete");
     return(DoDeleteAsync(doc, key));
 }
Пример #51
0
 public Task<int> UpdateAsync(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     CheckOpenStatus("Update");
             return DoUpdateAsync(row, key, filter);
 }
Пример #52
0
 protected abstract int DoUpdate(Doc doc, IDataStoreKey key, FieldFilterFunc filter             = null);
Пример #53
0
 protected abstract Task<int> DoDeleteAsync(Row row, IDataStoreKey key);
Пример #54
0
        public virtual int Update(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
        {
            var db = GetDatabase();

            return(DoUpdate(db, row, key, filter));
        }
Пример #55
0
 protected abstract Task<int> DoUpdateAsync(Row row, IDataStoreKey key, FieldFilterFunc filter = null);
Пример #56
0
 protected abstract int DoDelete(Doc doc, IDataStoreKey key);
Пример #57
0
        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 static void Save(SqlConnection cnn, ModelBase instance, IDataStoreKey key, object[] extra)
        {
            var record = asSuitableRecordInstance(instance, true);

              if (record.LastPostedChange!=ChangeType.Created && record.LastPostedChange!=ChangeType.Edited)
            throw new MsSQLDataAccessException(string.Format(StringConsts.MODEL_INVALID_STATE_ERROR, "Created || Edited", instance.LastPostedChange));

              bool insert = instance.LastPostedChange==ChangeType.Created;

              var cnames = new StringBuilder();
              var values = new StringBuilder();
              var vparams = new List<SqlParameter>();
              var vpidx = 0;
              foreach (var fld in record.Fields)
            if (fld.StoreFlag == StoreFlag.LoadAndStore || fld.StoreFlag == StoreFlag.OnlyStore)
             if (
              insert || fld.Modified
            )
             {
               cnames.AppendFormat(" [{0}],", fld.FieldName);
               if (fld.HasValue)
               {
             var pname = string.Format("@VAL{0}", vpidx);

             if (insert)
               values.AppendFormat(" {0},", pname);
             else
               values.AppendFormat(" [{0}] = {1},", fld.FieldName, pname);

             var par = new SqlParameter();
             par.ParameterName = pname;
             par.Value = fld.ValueAsObject;
             vparams.Add(par);

             vpidx++;
               }
               else
               {
             if (insert)
               values.Append(" NULL,");
             else
               values.AppendFormat(" [{0}] = NULL,", fld.FieldName);
               }
             }

              if (cnames.Length > 0)
              {
            cnames.Remove(cnames.Length - 1, 1);// remove ","
            if (values.Length > 0) values.Remove(values.Length - 1, 1);// remove ","
              }
              else
            return;//nothing has been modified

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

            if (insert) //INSERT
            {
            sql =
                 string.Format("INSERT INTO [{0}] ({1}) VALUES ({2})", record.TableName, cnames, values);
            }
            else //UPDATE
            {
              var pk = key ?? record.DataStoreKey;

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

              var where = keyToWhere(pk, cmd.Parameters);

              if (!string.IsNullOrEmpty(where))
               sql = string.Format("UPDATE [{0}] T1  SET {1} WHERE {2}", record.TableName, values, where);
              else
               sql = string.Format("UPDATE [{0}] T1  SET {1}", record.TableName, values);
            }

            cmd.CommandText = sql;
            cmd.Parameters.AddRange(vparams.ToArray());

            if (cmd.ExecuteNonQuery()==0)
              throw new MsSQLDataAccessException(string.Format(StringConsts.NO_ROWS_AFFECTED_ERROR, instance.LastPostedChange == ChangeType.Created ? "Insert":"Update"));

              }//using command
        }
Пример #59
0
 protected abstract Task <int> DoUpdateAsync(Doc doc, IDataStoreKey key, FieldFilterFunc filter = null);
Пример #60
0
 public virtual Task <int> UpdateAsync(Row row, IDataStoreKey key = null, FieldFilterFunc filter = null)
 {
     return(TaskUtils.AsCompletedTask(() => this.Update(row, key, filter)));
 }