Example #1
0
        private void _InternalDoPersistLarge(Revenj.Utility.ChunkedMemoryStream cms, global::UseCase1.Customer[] insertedData, List <KeyValuePair <global::UseCase1.Customer, global::UseCase1.Customer> > updatedData, global::UseCase1.Customer[] deletedData)
        {
            var dbq = DatabaseQuery as IPostgresDatabaseQuery;



            if (insertedData.Length > 0)
            {
                dbq.BulkInsert(
                    "\"UseCase1\".\">tmp-Customer-insert<\"",
                    insertedData.Select((item, ind) => new IPostgresTuple[] { IntConverter.ToTuple(ind), _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.CreateRecordTupleFrom(item, _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.TableTuples) }));
            }
            if (updatedData.Count > 0)
            {
                dbq.BulkInsert(
                    "\"UseCase1\".\">tmp-Customer-update<\"",
                    updatedData.Select((kv, ind) => new IPostgresTuple[] { IntConverter.ToTuple(ind), _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.CreateRecordTupleFrom(kv.Key, _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.PrimaryKeyUpdateTuples), _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.CreateRecordTupleFrom(kv.Value, _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.TableTuples) }));
            }
            if (deletedData.Length > 0)
            {
                dbq.BulkInsert(
                    "\"UseCase1\".\">tmp-Customer-delete<\"",
                    deletedData.Select((item, ind) => new IPostgresTuple[] { IntConverter.ToTuple(ind), _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.CreateRecordTupleFrom(item, _DatabaseCommon.FactoryUseCase1_Customer.CustomerConverter.PrimaryKeyDeleteTuples) }));
            }

            var sw = cms.GetWriter();

            sw.Write("/*NO LOAD BALANCE*/SELECT \"UseCase1\".\"persist_Customer_internal\"(");
            sw.Write(updatedData.Count);
            sw.Write(", ");
            sw.Write(deletedData.Length);



            sw.Write(")");



            sw.Flush();
            cms.Position = 0;
            var    com       = PostgresCommandFactory.NewCommand(cms, "SELECT \"UseCase1\".\"persist_Customer_internal\"(:updated_count,:deleted_count)");
            string _sqlError = null;

            DatabaseQuery.Execute(com, dr => _sqlError = dr.GetString(0));
            if (_sqlError != null)
            {
                throw new PostgresException(_sqlError);
            }


            foreach (var item in insertedData)
            {
                item.__ResetChangeTracking();
            }
            foreach (var item in updatedData)
            {
                item.Value.__ResetChangeTracking();
            }
        }
 public static IPostgresTuple NullableIntegerToTuple(int?value)
 {
     return(value != null?IntConverter.ToTuple(value.Value) : null);
 }
 public static IPostgresTuple IntegerToTuple(int value)
 {
     return(IntConverter.ToTuple(value));
 }