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)); }