考虑以下:
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'但最终的值为 …
按照标题。
我看了手册页,似乎没有任何命令行参数在“ CREATE TABLE”语句中包含“ IF NOT EXISTS”子句。
很多关于CQRS的文章都暗示传奇有内部状态,必须保存到活动商店.我不明白为什么这是必要的.
例如,假设我有三个聚集:Order,Invoice和Shipment.当客户下订单时,订单处理开始.但是,在发票已经支付并且货物已经准备好之前,不能发送货件.
PlaceOrder命令下订单.OrderCommandHandler电话OrderRepository::placeOrder().OrderRepository::placeOrder()方法返回一个OrderPlaced事件,该事件存储在EventStore并沿其发送EventBus.OrderPlaced事件包含orderId和预分配a invoiceId和shipmentId.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) 以下有关 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.Create和myObj.Free,myObj := 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) (编辑:以下是针对以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) 在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) 我理解下划线t(_t)用于标识类型_type,通常在typedef语句中使用下划线类型().
是否存在略微不同的用法(例如,模板的下划线类型,但非模板的下划线)?
为什么它们不用于声明?例如:
class person_t { };
enum error_t { };
Run Code Online (Sandbox Code Playgroud)这与下一个关于下划线t的问题不同,因为它还要求下划线类型之间的差异.此外,(明显地)两个后缀都只是惯例(但很明显,为什么它们都在C++标准中使用)并不明显.例如,std :: size_t vs std :: istream :: pos_type.
在 Linux 上,C 标准库调用fread并fwrite执行系统调用等效项,read并且write.
系统调用的手册页提到了中断,说errnoset to可能会发生短写EINTR。但是,库函数的手册页没有提及中断。那么,在这些库函数中会发生中断吗?
我在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"符号,因此将IP地址设置为123.456.789.12而不是127.0.0.1.我究竟做错了什么?
这个问题是继续来自Delphi的条件编译是否允许定义的符号包含值?
delphi debugging preprocessor conditional-compilation delphi-7
根据标题问题.
我假设答案是"不,因为std::back_insert_iterator对象调用push_back()容器."
如果答案实际上是否定的,那么我可以在我的模板函数中使用任何模板类迭代器来附加到a std::string,追加到a std::vector<char>,并写入std::ostream?