小编mag*_*nus的帖子

PostgreSQL 是否有一种机制可以在单个查询中多次更新同一行?

考虑以下:

create table tmp.x (i integer, t text);
create table tmp.y (i integer, t text);
delete from tmp.x;
delete from tmp.y;
insert into tmp.x values (1, 'hi');
insert into tmp.y values(1, 'there');
insert into tmp.y values(1, 'wow');
Run Code Online (Sandbox Code Playgroud)

在上面, table 中有一行x我想更新。在 table 中y,有两行,我都想将这两行“馈送到”更新中。

以下是我的尝试:

update tmp.x
set t = x.t || y.t
from ( select * from tmp.y order by t desc ) y
where y.i = x.i;

select * from tmp.x;
Run Code Online (Sandbox Code Playgroud)

x.t我希望的值为 ,'hiwowthere'但最终的值为 …

sql postgresql sql-update

5
推荐指数
1
解决办法
1926
查看次数

可以指示pg_dump使用“ IF NOT EXISTS”创建表吗?

按照标题。

我看了手册页,似乎没有任何命令行参数在“ CREATE TABLE”语句中包含“ IF NOT EXISTS”子句。

sql postgresql pg-dump

5
推荐指数
1
解决办法
4148
查看次数

为什么sagas(又名流程管理员)包含一个内部状态,为什么它们会持久存在于事件存储中?

很多关于CQRS的文章都暗示传奇有内部状态,必须保存到活动商店.我不明白为什么这是必要的.

例如,假设我有三个聚集:Order,InvoiceShipment.当客户下订单时,订单处理开始.但是,在发票已经支付并且货物已经准备好之前,不能发送货件.

  1. 客户使用PlaceOrder命令下订单.
  2. OrderCommandHandler电话OrderRepository::placeOrder().
  3. OrderRepository::placeOrder()方法返回一个OrderPlaced事件,该事件存储在EventStore并沿其发送EventBus.
  4. OrderPlaced事件包含orderId和预分配a invoiceIdshipmentId.
  5. OrderProcess("传奇")接收的OrderPlaced情况下,创造了发票,并准备装运(如有必要,在事件处理程序实现幂等).6A.在某个时间点,OrderProcess接收InvoicePaid事件.它通过查询货物来检查货物是否已经准备好ShipmentRepository,如果是,则发送货物.6B.在某个时间点,OrderProcess接收ShipmentPrepared事件.它通过在中查找发票来查看是否已支付发票InvoiceRepository,如果是,则发送货件.

对于那里所有经验丰富的DDD/CQRS/ES大师,你能告诉我我错过了什么概念以及为什么这个"无国籍传奇"的设计不起作用?

class OrderCommandHandler {
    public function handle(PlaceOrder $command) {
        $event = $this->orderRepository->placeOrder($command->orderId, $command->customerId, ...);
        $this->eventStore->store($event);
        $this->eventBus->emit($event);
    }
}

class OrderRepository {
    public function placeOrder($orderId, $customerId, ...) {
        $invoiceId = …
Run Code Online (Sandbox Code Playgroud)

domain-driven-design cqrs event-sourcing

5
推荐指数
2
解决办法
1086
查看次数

Delphi 中的动态数组和内存管理

以下有关 Delphi 中动态数组的文章说您使用该SetLength()函数分配动态数组。

myObjects : array of MyObject;
...
SetLength(myObjects, 20);
// Do something with the array.
myObjects := nil;
Run Code Online (Sandbox Code Playgroud)

http://delphi.about.com/od/beginners/a/arrays.htm

这对我来说似乎是内存泄漏:

问题是,如果SetLength()是 C++ 的等价物MyObject *obs = new MyObject[20],那么数组只是指针,那么将 DelphimyObjects变量nil设置为obj = NULL与 C++ 中的设置相同吗?即,这是内存泄漏吗?

编辑:我从大卫的回答中了解到编译器管理动态分配数组的内存。我也从他的回答理解比编译器管理的普通类实例存储(因此使用myObj := MyObject.CreatemyObj.FreemyObj := nil等)。此外,因为 Delphi 类(不是记录)总是在堆上分配(Delphi 使用一种引用/指针系统),这是否意味着(自动内存管理)动态数组中的所有对象仍然需要是内存 -由我管理?例如,以下是否通过双重释放结果导致错误?

myObjects : array of MyObject;
...
SetLength(myObjects, 20);
for i := 0 to 19 do
begin
  myObjects[i] …
Run Code Online (Sandbox Code Playgroud)

c++ arrays delphi pointers

4
推荐指数
1
解决办法
2325
查看次数

为什么我收到有关Delphi不兼容类型(数组和动态数组)的错误?

(编辑:以下是针对以Windows为目标的Delphi应用程序中的Are对象引用计数,如果是,它的目的是什么?以及Delphi中的动态数组和内存管理).

我有两个类(TGenericHoldingSummary,TGenericHoldingResultSet)和一个记录(TGenericHoldingResult).

  • TGenericHoldingSummary包含一个TGenericHoldingResultSet,nil如果需要,可以从数据库设置并延迟加载.
  • TGenericHoldingResultSet包含的动态数组TGenericHoldingResult记录.

在下面,错误是在TGenericHoldingResultSet构造函数中的赋值.

TGenericHoldingResult = record
  code : Integer;
  level : String;
  msg : String;
end;

TGenericHoldingResultSet = class(TObject)
  public
    // Lifecycle
    constructor Create(parent : TGenericHoldingSummary; resArr : Array of TGenericHoldingResult);
    destructor Destroy;
    // Accessors
    function ResultCount() : Integer;
    function Result(i : Integer) : TGenericHoldingResult;
  private
    // Variables
    summary : TGenericHoldingSummary;
    resultArray : Array of …
Run Code Online (Sandbox Code Playgroud)

arrays delphi dynamic-data

4
推荐指数
1
解决办法
3005
查看次数

Delphi的条件编译是否允许定义的符号包含值?

在Delphi中,您可以定义符号,就像在C/C++中一样.

德尔福:

{$DEFINE MY_SYMBOL}
Run Code Online (Sandbox Code Playgroud)

C/C++:

#define MY_SYMBOL
Run Code Online (Sandbox Code Playgroud)

这允许您通过{$IFDEF MY_SYMBOL}在Delphi或#ifdef MY_SYMBOLC/C++中使用来检查符号是否已定义.

这是一个布尔值 - 符号是在预处理期间定义的.但是,C/C++还允许您为预处理器符号赋值.例如:

#ifdef DEBUG
#define DB_HOST "127.0.0.1"
#else
#define DB_HOST "123.456.789.123"
#endif

Database *pDatabase = new Database(DB_HOST);
Run Code Online (Sandbox Code Playgroud)

是否可以在Delphi中为预处理器符号赋值,或者Delphi是否仅允许您确定是否已定义符号?

编辑:由于Delphi不支持预处理器中的符号,我假设它不支持预处理器.我在这个假设中是对的吗?

例如,在C中,您可以定义一个预处理器宏,在编译之前将其与适当的参数一起复制和粘贴.当您希望"内联函数"功能用于快速操作(例如,二进制逻辑,在整数值中测试,位移等)而没有堆栈帧的开销,参数传递等时,这非常有用.

#define OK_FLAG 0x00000001
#define OK(f) (f & OK_FLAG)

#define WEAK_XOR_CIPHER(v) (v ^ 0xff)
Run Code Online (Sandbox Code Playgroud)

delphi macros preprocessor symbols

4
推荐指数
1
解决办法
2325
查看次数

C/C++下划线t/type(_t/_type)和类名?

我理解下划线t(_t)用于标识类型_type,通常在typedef语句中使用下划线类型().

  1. 是否存在略微不同的用法(例如,模板的下划线类型,但非模板的下划线)?

  2. 为什么它们不用于声明?例如:

    class person_t { };
    enum error_t { };
    
    Run Code Online (Sandbox Code Playgroud)

这与下一个关于下划线t的问题不同,因为它还要求下划线类型之间的差异.此外,(明显地)两个后缀都只是惯例(但很明显,为什么它们都在C++标准中使用)并不明显.例如,std :: size_t vs std :: istream :: pos_type.

c c++ typedef

4
推荐指数
1
解决办法
1092
查看次数

在 fread() 和 fwrite() 库调用期间是否调度了中断信号?

在 Linux 上,C 标准库调用freadfwrite执行系统调用等效项,read并且write.

系统调用的手册页提到了中断,说errnoset to可能会发生短写EINTR。但是,库函数的手册页没有提及中断。那么,在这些库函数中会发生中断吗?

https://linux.die.net/man/3/fwrite

c file interrupt file-handling

4
推荐指数
1
解决办法
749
查看次数

为什么我的{$ IFDEF DEBUG}条件不适用于Delphi?

我在Delphi 7项目中有以下代码(IP地址已更改).

const
{$IFNDEF DEBUG}
    AUTHENTICATOR_DB_ADMIN_HOST = '123.456.789.12';
{$ELSE}
    AUTHENTICATOR_DB_ADMIN_HOST = '127.0.0.1';
{$ENDIF}
Run Code Online (Sandbox Code Playgroud)

根据项目选项:

  • 在标题为"条件"的部分下的"目录/条件"选项卡中,我有一个单独的定义:"DEBUG".
  • 在标记为"模块属性"的部分下的"版本信息"选项卡中,我勾选了标记为"调试 - 构建"的复选框.

在上面的代码示例中,未定义"DEBUG"符号,因此将IP地址设置为123.456.789.12而不是127.0.0.1.我究竟做错了什么?

这个问题是继续来自Delphi的条件编译是否允许定义的符号包含值?

delphi debugging preprocessor conditional-compilation delphi-7

3
推荐指数
1
解决办法
8522
查看次数

可以在std :: ostream上使用std :: back_insert_iterator吗?

根据标题问题.

我假设答案是"不,因为std::back_insert_iterator对象调用push_back()容器."

如果答案实际上是否定的,那么我可以在我的模板函数中使用任何模板类迭代器来附加到a std::string,追加到a std::vector<char>,并写入std::ostream

c++ boost iterator iostream stl

3
推荐指数
1
解决办法
219
查看次数