Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qMdCR-002si4-VO for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Jul 2023 23:36:48 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qMdCP-003kac-B3 for pgsql-hackers@arkaria.postgresql.org; Thu, 20 Jul 2023 23:36:45 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1qMdCO-003kZx-SL for pgsql-hackers@lists.postgresql.org; Thu, 20 Jul 2023 23:36:45 +0000 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qMdCK-000aN9-BR for pgsql-hackers@postgresql.org; Thu, 20 Jul 2023 23:36:43 +0000 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-6689430d803so913725b3a.0 for ; Thu, 20 Jul 2023 16:36:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=timescale.com; s=google; t=1689896199; x=1690500999; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=86AuU1bcW2hODWHkyEWXRaQcYEEyITpvRiG+XvJitGA=; b=GCaX1POMty+a6u0g6xVFK7SuoMVeefkmQFeKeU4eSyP/7dME8d0vInA5nCSEM4HGzy LFBWEzv/SWXc9GxcFvX2IpPpWZC1T/OURV2Slvp84JYNyvRH8nK0S6ZGlqh4Va+TfPw9 OFM7H+hAV5HFR1B5Uf8NMreoJ/aaHDcWaLlm8ViRBxDk2bvYovAV71t/MaPZlz7ttSIS 0mJj2nDnyBG3KjpS/pPt5A/HQS/slcw730uxQxuF7SQlDxypfeWjeULZJ0dFaF66LE+0 uL9tXHjc8VMvxMbfrnSohWusnFYyMt1YEYi/yMBEf1XQ3imt93RtsO4Ckv179PiPCL5/ CnBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689896199; x=1690500999; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=86AuU1bcW2hODWHkyEWXRaQcYEEyITpvRiG+XvJitGA=; b=cH6kbRjcXbcLK8pqZ1IUVUkpUarabsSKboYPuG0PbSLfTlE64Q+nziKnL8i6+IAVZp MzvgtUGNSQaJUJErux9XhFLdPrXYl6uF3G8mmHIpwa7F/+yTeph5tN6GdxpkB5e5TsPK 1cj2A8eMoJNDfBywAySFP9e8MO+N3gw5+JQQnuENdCIAmIOxdtQSUGDLzTlHWfN5tRX1 ijl4BLwIvY7tvms/2QwqVej0EjeOWfuR2/v17S70AapxSy+qJe6Ozp+00CzzddPKry1k kpEIzEua00V8KAihdriJkmqP/2FPxGZuT/KMfXaRrA7nkBbQfSwPF+uyed2ENbv+4VKk 8vWg== X-Gm-Message-State: ABy/qLb0U1ZZn7l2pyeozHsTURVYOmAAg7UjPkRd0vsMwXXKYuPdDVXd YqytxOR1qiEEKW+lUyjdM9Q4Kw== X-Google-Smtp-Source: APBJJlG3Bxd4L5nvPbeTYugjM8VIKeqZbQx0oyFMOYuMuvdUO2Xtkh+O7XUK492lK7ZlmHRoK6ZvQQ== X-Received: by 2002:a05:6a00:1942:b0:682:f48a:726a with SMTP id s2-20020a056a00194200b00682f48a726amr260865pfk.25.1689896198661; Thu, 20 Jul 2023 16:36:38 -0700 (PDT) Received: from [192.168.1.21] ([50.53.8.205]) by smtp.gmail.com with ESMTPSA id y6-20020a63b506000000b005348af1b84csm1797321pge.74.2023.07.20.16.36.37 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 20 Jul 2023 16:36:38 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------16BwNw4m06Sf7I3Q9RM4oRPA" Message-ID: <022a392f-2a9e-3df1-a509-a5bd51160fa5@timescale.com> Date: Thu, 20 Jul 2023 16:36:37 -0700 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.13.0 Subject: Re: Row pattern recognition To: Tatsuo Ishii Cc: pgsql-hackers@postgresql.org, vik@postgresfriends.org References: <90bff6fa-01b7-cf60-f4f4-3412514a7cd2@postgresfriends.org> <20230628.095819.1123345378945479712.t-ishii@sranhm.sra.co.jp> <07214b3a-5893-f6ce-ef55-0e5d24c94925@timescale.com> <20230720.141513.1986681389874528348.t-ishii@sranhm.sra.co.jp> Content-Language: en-US From: Jacob Champion In-Reply-To: <20230720.141513.1986681389874528348.t-ishii@sranhm.sra.co.jp> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------16BwNw4m06Sf7I3Q9RM4oRPA Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi Ishii-san, On 7/19/23 22:15, Tatsuo Ishii wrote: > Currently my patch has a limitation for the sake of simple > implementation: a pattern like "A+" is parsed and analyzed in the raw > parser. This makes subsequent process much easier because the pattern > element variable (in this case "A") and the quantifier (in this case > "+") is already identified by the raw parser. However there are much > more cases are allowed in the standard as you already pointed out. For > those cases probably we should give up to parse PATTERN items in the > raw parser, and instead the raw parser just accepts the elements as > Sconst? Is there a concern that the PATTERN grammar can't be represented in Bison? I thought it was all context-free... Or is the concern that the parse tree of the pattern is hard to feed into a regex engine? > Any comments, especially on the PREV/NEXT implementation part is > welcome. Currently the DEFINE expression like "price > PREV(price)" is > prepared in ExecInitWindowAgg using ExecInitExpr,tweaking var->varno > in Var node so that PREV uses OUTER_VAR, NEXT uses INNER_VAR. Then > evaluate the expression in ExecWindowAgg using ExecEvalExpr, setting > previous row TupleSlot to ExprContext->ecxt_outertuple, and next row > TupleSlot to ExprContext->ecxt_innertuple. I think this is temporary > hack and should be gotten ride of before v1 is committed. Better idea? I'm not familiar enough with this code yet to offer very concrete suggestions, sorry... But at some point in the future, we need to be able to skip forward and backward from arbitrary points, like DEFINE B AS B.price > PREV(FIRST(A.price), 3) so there won't be just one pair of "previous and next" tuples. Maybe that can help clarify the design? It feels like it'll need to eventually be a "real" function that operates on the window state, even if it doesn't support all of the possible complexities in v1. -- Taking a closer look at the regex engine: It looks like the + qualifier has trouble when it meets the end of the frame. For instance, try removing the last row of the 'stock' table in rpr.sql; some of the final matches will disappear unexpectedly. Or try a pattern like PATTERN ( a+ ) DEFINE a AS TRUE which doesn't seem to match anything in my testing. There's also the issue of backtracking in the face of reclassification, as I think Vik was alluding to upthread. The pattern PATTERN ( a+ b+ ) DEFINE a AS col = 2, b AS col = 2 doesn't match a sequence of values (2 2 ...) with the current implementation, even with a dummy row at the end to avoid the end-of-frame bug. (I've attached two failing tests against v2, to hopefully better illustrate, along with what I _think_ should be the correct results.) I'm not quite understanding the match loop in evaluate_pattern(). It looks like we're building up a string to pass to the regex engine, but by the we call regexp_instr, don't we already know whether or not the pattern will match based on the expression evaluation we've done? Thanks, --Jacob --------------16BwNw4m06Sf7I3Q9RM4oRPA Content-Type: text/plain; charset=UTF-8; name="tests.diff.txt" Content-Disposition: attachment; filename="tests.diff.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByLm91dCBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcnByLm91dAppbmRleCA2YmY4ODE4OTExLi42OGU5YTk4 Njg0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Jwci5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9ycHIub3V0CkBAIC0yMzAsNiArMjMwLDc5 IEBAIFNFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIHJwcihwcmljZSkgT1ZFUiB3IEZS T00gc3RvY2sKICBjb21wYW55MiB8IDA3LTEwLTIwMjMgfCAgMTMwMCB8ICAgICAKICgyMCBy b3dzKQogCistLSBtYXRjaCBldmVyeXRoaW5nCitTRUxFQ1QgY29tcGFueSwgdGRhdGUsIHBy aWNlLCBycHIocHJpY2UpIE9WRVIgdyBGUk9NIHN0b2NrCisgV0lORE9XIHcgQVMgKAorIFBB UlRJVElPTiBCWSBjb21wYW55CisgT1JERVIgQlkgdGRhdGUKKyBST1dTIEJFVFdFRU4gQ1VS UkVOVCBST1cgQU5EIFVOQk9VTkRFRCBGT0xMT1dJTkcKKyBBRlRFUiBNQVRDSCBTS0lQIFRP IE5FWFQgUk9XCisgSU5JVElBTAorIFBBVFRFUk4gKEErKQorIERFRklORQorICBBIEFTIFRS VUUKKyk7CisgY29tcGFueSAgfCAgIHRkYXRlICAgIHwgcHJpY2UgfCBycHIgCistLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tKy0tLS0tCisgY29tcGFueTEgfCAwNy0wMS0yMDIz IHwgICAxMDAgfCAxMDAKKyBjb21wYW55MSB8IDA3LTAyLTIwMjMgfCAgIDIwMCB8ICAgIAor IGNvbXBhbnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgCisgY29tcGFueTEgfCAwNy0w NC0yMDIzIHwgICAxNDAgfCAgICAKKyBjb21wYW55MSB8IDA3LTA1LTIwMjMgfCAgIDE1MCB8 ICAgIAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgCisgY29tcGFueTEg fCAwNy0wNy0yMDIzIHwgICAxMTAgfCAgICAKKyBjb21wYW55MSB8IDA3LTA4LTIwMjMgfCAg IDEzMCB8ICAgIAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgCisgY29t cGFueTEgfCAwNy0xMC0yMDIzIHwgICAxMzAgfCAgICAKKyBjb21wYW55MiB8IDA3LTAxLTIw MjMgfCAgICA1MCB8ICA1MAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwgICAg CisgY29tcGFueTIgfCAwNy0wMy0yMDIzIHwgIDE1MDAgfCAgICAKKyBjb21wYW55MiB8IDA3 LTA0LTIwMjMgfCAgMTQwMCB8ICAgIAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8ICAxNTAw IHwgICAgCisgY29tcGFueTIgfCAwNy0wNi0yMDIzIHwgICAgNjAgfCAgICAKKyBjb21wYW55 MiB8IDA3LTA3LTIwMjMgfCAgMTEwMCB8ICAgIAorIGNvbXBhbnkyIHwgMDctMDgtMjAyMyB8 ICAxMzAwIHwgICAgCisgY29tcGFueTIgfCAwNy0wOS0yMDIzIHwgIDEyMDAgfCAgICAKKyBj b21wYW55MiB8IDA3LTEwLTIwMjMgfCAgMTMwMCB8ICAgIAorKDIwIHJvd3MpCisKKy0tIGJh Y2t0cmFja2luZyB3aXRoIHJlY2xhc3NpZmljYXRpb24gb2Ygcm93cworU0VMRUNUIGNvbXBh bnksIHRkYXRlLCBwcmljZSwgcnByKHByaWNlKSBPVkVSIHcgRlJPTSBzdG9jaworIFdJTkRP VyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRlCisgUk9X UyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisgQUZURVIg TUFUQ0ggU0tJUCBUTyBORVhUIFJPVworIElOSVRJQUwKKyBQQVRURVJOIChBKyBCKykKKyBE RUZJTkUKKyAgQSBBUyBwcmljZSA+IDEwMCwKKyAgQiBBUyBwcmljZSA+IDEwMAorKTsKKyBj b21wYW55ICB8ICAgdGRhdGUgICAgfCBwcmljZSB8IHJwciAgCistLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tKy0tLS0tLQorIGNvbXBhbnkxIHwgMDctMDEtMjAyMyB8ICAgMTAw IHwgIDEwMAorIGNvbXBhbnkxIHwgMDctMDItMjAyMyB8ICAgMjAwIHwgICAgIAorIGNvbXBh bnkxIHwgMDctMDMtMjAyMyB8ICAgMTUwIHwgICAgIAorIGNvbXBhbnkxIHwgMDctMDQtMjAy MyB8ICAgMTQwIHwgICAgIAorIGNvbXBhbnkxIHwgMDctMDUtMjAyMyB8ICAgMTUwIHwgICAg IAorIGNvbXBhbnkxIHwgMDctMDYtMjAyMyB8ICAgIDkwIHwgICAgIAorIGNvbXBhbnkxIHwg MDctMDctMjAyMyB8ICAgMTEwIHwgIDExMAorIGNvbXBhbnkxIHwgMDctMDgtMjAyMyB8ICAg MTMwIHwgICAgIAorIGNvbXBhbnkxIHwgMDctMDktMjAyMyB8ICAgMTIwIHwgICAgIAorIGNv bXBhbnkxIHwgMDctMTAtMjAyMyB8ICAgMTMwIHwgICAgIAorIGNvbXBhbnkyIHwgMDctMDEt MjAyMyB8ICAgIDUwIHwgICAgIAorIGNvbXBhbnkyIHwgMDctMDItMjAyMyB8ICAyMDAwIHwg MjAwMAorIGNvbXBhbnkyIHwgMDctMDMtMjAyMyB8ICAxNTAwIHwgICAgIAorIGNvbXBhbnky IHwgMDctMDQtMjAyMyB8ICAxNDAwIHwgICAgIAorIGNvbXBhbnkyIHwgMDctMDUtMjAyMyB8 ICAxNTAwIHwgICAgIAorIGNvbXBhbnkyIHwgMDctMDYtMjAyMyB8ICAgIDYwIHwgICAgIAor IGNvbXBhbnkyIHwgMDctMDctMjAyMyB8ICAxMTAwIHwgMTEwMAorIGNvbXBhbnkyIHwgMDct MDgtMjAyMyB8ICAxMzAwIHwgICAgIAorIGNvbXBhbnkyIHwgMDctMDktMjAyMyB8ICAxMjAw IHwgICAgIAorIGNvbXBhbnkyIHwgMDctMTAtMjAyMyB8ICAxMzAwIHwgICAgIAorKDIwIHJv d3MpCisKIC0tCiAtLSBFcnJvciBjYXNlcwogLS0KZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL3Jwci5zcWwgYi9zcmMvdGVzdC9yZWdyZXNzL3NxbC9ycHIuc3FsCmluZGV4 IDk1MWM5YWJmZTkuLmYxY2QwMzY5ZjQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3Jwci5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcnByLnNxbApAQCAtOTQs NiArOTQsMzMgQEAgU0VMRUNUIGNvbXBhbnksIHRkYXRlLCBwcmljZSwgcnByKHByaWNlKSBP VkVSIHcgRlJPTSBzdG9jawogICBVUERPV04gQVMgcHJpY2UgPiBQUkVWKHByaWNlKSBBTkQg cHJpY2UgPiBORVhUKHByaWNlKQogKTsKIAorLS0gbWF0Y2ggZXZlcnl0aGluZworU0VMRUNU IGNvbXBhbnksIHRkYXRlLCBwcmljZSwgcnByKHByaWNlKSBPVkVSIHcgRlJPTSBzdG9jawor IFdJTkRPVyB3IEFTICgKKyBQQVJUSVRJT04gQlkgY29tcGFueQorIE9SREVSIEJZIHRkYXRl CisgUk9XUyBCRVRXRUVOIENVUlJFTlQgUk9XIEFORCBVTkJPVU5ERUQgRk9MTE9XSU5HCisg QUZURVIgTUFUQ0ggU0tJUCBUTyBORVhUIFJPVworIElOSVRJQUwKKyBQQVRURVJOIChBKykK KyBERUZJTkUKKyAgQSBBUyBUUlVFCispOworCistLSBiYWNrdHJhY2tpbmcgd2l0aCByZWNs YXNzaWZpY2F0aW9uIG9mIHJvd3MKK1NFTEVDVCBjb21wYW55LCB0ZGF0ZSwgcHJpY2UsIHJw cihwcmljZSkgT1ZFUiB3IEZST00gc3RvY2sKKyBXSU5ET1cgdyBBUyAoCisgUEFSVElUSU9O IEJZIGNvbXBhbnkKKyBPUkRFUiBCWSB0ZGF0ZQorIFJPV1MgQkVUV0VFTiBDVVJSRU5UIFJP VyBBTkQgVU5CT1VOREVEIEZPTExPV0lORworIEFGVEVSIE1BVENIIFNLSVAgVE8gTkVYVCBS T1cKKyBJTklUSUFMCisgUEFUVEVSTiAoQSsgQispCisgREVGSU5FCisgIEEgQVMgcHJpY2Ug PiAxMDAsCisgIEIgQVMgcHJpY2UgPiAxMDAKKyk7CisKIC0tCiAtLSBFcnJvciBjYXNlcwog LS0K --------------16BwNw4m06Sf7I3Q9RM4oRPA--