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 1rpCoD-005agt-TW for pgsql-hackers@arkaria.postgresql.org; Tue, 26 Mar 2024 19:50:10 +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 1rpCoC-004Xiv-PV for pgsql-hackers@arkaria.postgresql.org; Tue, 26 Mar 2024 19:50:08 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rpCoC-004XiY-Cu for pgsql-hackers@lists.postgresql.org; Tue, 26 Mar 2024 19:50:08 +0000 Received: from mail-lj1-x22f.google.com ([2a00:1450:4864:20::22f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1rpCo9-006dUN-8F for pgsql-hackers@postgresql.org; Tue, 26 Mar 2024 19:50:07 +0000 Received: by mail-lj1-x22f.google.com with SMTP id 38308e7fff4ca-2d6c8d741e8so53807851fa.3 for ; Tue, 26 Mar 2024 12:50:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1711482605; x=1712087405; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=d9jk6ztJbCDpeur6USSB7U3JOj3vnGstT6jWoGbT3BA=; b=OnT93gmafCAHrx13CHalGBqwjOx+MpAM3ZO6KtraSv75ObBqfAkXLmRpqy+jQy3tW7 aG/u3CL874qvsOGQAY46JouAipmZB/FoRdURfLeYhDzbqH+cVsVKLYXquVQCn/0C8q5n 6fnkD5zI9Zy/P0ANOkHDNftUyV8k8JvAPHMGuPvUO/q9dNTwdZ0i2L79OQHKrkZEkbyz wLagl6Rf9nu6q8CADh80zAIVd7/zIxymH6HfAgqbDnhPBLOicChEJZUnag6Kz9yCDLwu ADCcXh+6Nobwdla8JumasGmXzywtqXduqci1kFpiArvKrnJdlPMzd2YLGWxuuXQebHI/ 9TJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1711482605; x=1712087405; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=d9jk6ztJbCDpeur6USSB7U3JOj3vnGstT6jWoGbT3BA=; b=HUYug2QJ3Rf3w1MQPvWEUHp6OF7rtem9gknkgnbaZBvYh0UNha4hCVmLuewV53HNMe EceYnlABelbQBFwuGGk8J4xTlf4XiyugsQhBmTBtzxa9jX8/EeRcwDc7WbOkaaQWXa2a mxoVuBa03bfOmvyH7EEADOZVL59tNSsnflN3ZTNIxLl+rhXJAQ8EAbWODB6Pv+KHAIUR UNnNrl2K9oZuJOry2g+Z2PqSm8wx4odwsdDXllZg8/skbfklnYF/miDGJpWdkKI6k1wK 4OGbvXzOk4JkodLVzAc6kTY7OHf7URe69Hn8qv2aUVweNoGOjC1BAR1i/jz/eLoFpW77 daKA== X-Forwarded-Encrypted: i=1; AJvYcCX2XLg7zfTrDSErJMk0Oum3DvNVdcGjQwZrnM7KuhnwhV5QJZNDHi7RSpp8X0h722uTtzIO+W9/yXxZ7vwGayR/t/yXHxPqrp5OBzHG X-Gm-Message-State: AOJu0Yy6vgCO6EyQ/4ppFNOG9qqnmgyMKQji15QB+S3d7V1i0+FwhWne sQEQEQc7A1qj+xW9meDEZJp++zMcIpukCtCDP4VqH3WBFcOMGWmS7oyaaGUde7AJweYyWOJpSEr STsqPayNEO0jY2idTNoyakG33Tq8= X-Google-Smtp-Source: AGHT+IFTX4kQJQuHu/ZcQ6KHu2LADaICqaIknLpFja1nNgQCIoUvRBHK+hVAvDwefqsdAdHVrcXsnDvhYsziHNcXzIs= X-Received: by 2002:a2e:95c4:0:b0:2d6:c726:ee60 with SMTP id y4-20020a2e95c4000000b002d6c726ee60mr470934ljh.14.1711482604412; Tue, 26 Mar 2024 12:50:04 -0700 (PDT) MIME-Version: 1.0 References: <20230603223824.o7iyochli2dwwi7k@alap3.anarazel.de> <6be6f58815dc0844fbe058edf56b4e735a6efc1c.camel@j-davis.com> <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> In-Reply-To: <2280bf7241119bb88cbe0fe5eb36490cbd04c0c0.camel@j-davis.com> From: Bharath Rupireddy Date: Wed, 27 Mar 2024 01:19:51 +0530 Message-ID: Subject: Re: New Table Access Methods for Multi and Single Inserts To: Jeff Davis Cc: Masahiko Sawada , PostgreSQL-development , Andres Freund , Dilip Kumar , Luc Vlaming , Justin Pryzby , Michael Paquier , Matthias van de Meent Content-Type: multipart/mixed; boundary="000000000000ad7d920614959845" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ad7d920614959845 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Tue, Mar 26, 2024 at 9:07=E2=80=AFPM Jeff Davis wrot= e: > > On Tue, 2024-03-26 at 01:28 +0530, Bharath Rupireddy wrote: > > I'm thinking > > of dropping the COPY FROM patch using the new multi insert API for > > the > > following reasons: ... > > I agree with all of this. We do want COPY ... FROM support, but there > are some details to work out and we don't want to make a big code > change at this point in the cycle. Right. > > Please see the attached v14 patches. > > * No need for a 'kind' field in TableModifyState. The state should be > aware of the kinds of changes that it has received and that may need to > be flushed later -- for now, only inserts, but possibly updates/deletes > in the future. Removed 'kind' field with lazy initialization of required AM specific modify (insert in this case) state. Since we don't have 'kind', I chose the callback approach to cleanup the modify (insert in this case) specific state at the end. > * If the AM doesn't support the bulk methods, fall back to retail > inserts instead of throwing an error. For instance, CREATE MATERIALIZED VIEW foo_mv AS SELECT * FROM foo USING bar_tam; doesn't work if bar_tam doesn't have the table_tuple_insert implemented. Similarly, with this new AM, the onus lies on the table AM implementers to provide an implementation for these new AMs even if they just do single inserts. But, I do agree that we must catch this ahead during parse analysis itself, so I've added assertions in GetTableAmRoutine(). > * It seems like this API will eventually replace table_multi_insert and > table_finish_bulk_insert completely. Do those APIs have any advantage > remaining over the new one proposed here? table_multi_insert needs to be there for sure as COPY ... FROM uses it. Not sure if we need to remove the optional callback table_finish_bulk_insert though. Heap AM doesn't implement one, but some other AM might. Having said that, with this new AM, whatever the logic that used to be there in table_finish_bulk_insert previously, table AM implementers will have to move them to table_modify_end. FWIW, I can try writing a test table AM that uses this new AM but just does single inserts, IOW, equivalent to table_tuple_insert(). Thoughts? > * Right now I don't any important use of the flush method. It seems > that could be accomplished in the finish method, and flush could just > be an internal detail when the memory is exhausted. If we find a use > for it later, we can always add it, but right now it seems unnecessary. Firstly, we are not storing CommandId and options in TableModifyState, because we expect CommandId to be changing (per Andres comment). Secondly, we don't want to pass just the CommandId and options to table_modify_end(). Thirdly, one just has to call the table_modify_buffer_flush before the table_modify_end. Do you have any other thoughts here? > * We need to be careful about cases where the command can be successful > but the writes are not flushed. I don't tihnk that's a problem with the > current patch, but we will need to do something here when we expand to > INSERT INTO ... SELECT. You mean, writes are not flushed to the disk? Can you please elaborate why it's different for INSERT INTO ... SELECT and not others? Can't the new flush AM be helpful here to implement any flush related things? Please find the attached v15 patches with the above review comments address= ed. -- Bharath Rupireddy PostgreSQL Contributors Team RDS Open Source Databases Amazon Web Services: https://aws.amazon.com --000000000000ad7d920614959845 Content-Type: application/octet-stream; name="v15-0001-Introduce-new-table-modify-access-methods.patch" Content-Disposition: attachment; filename="v15-0001-Introduce-new-table-modify-access-methods.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu8s5xzk0 RnJvbSA5OWY1ODE0Y2E4ZjU2MWIwOTc3N2RkMGU3ZTA2YjJiMDE5ODc1MWYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjYgTWFyIDIwMjQgMTk6MzM6MjkgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxNSAxLzNdIEludHJvZHVjZSBuZXcgdGFibGUgbW9kaWZ5IGFj Y2VzcyBtZXRob2RzCgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jICAgICAg ICAgfCAxNzggKysrKysrKysrKysrKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgfCAgIDYgKwogc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxl YW1hcGkuYyAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggICAgICAgICAg ICAgIHwgIDQ1ICsrKysrKwogc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCAgICAgICAgICAg ICB8ICA2NyArKysrKysrKysKIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0ICAgICAg ICAgfCAgIDMgKwogNiBmaWxlcyBjaGFuZ2VkLCAzMDMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlv bigtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKaW5kZXggOWE4YzhlMzM0OC4uZjBkNWNmNWI1 YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMKQEAgLTY0LDYgKzY0LDcgQEAKICNpbmNsdWRl ICJzdG9yYWdlL3N0YW5kYnkuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUg InV0aWxzL2ludmFsLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKICNpbmNsdWRlICJ1 dGlscy9yZWxjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3NuYXBtZ3IuaCIKICNpbmNsdWRlICJ1 dGlscy9zcGNjYWNoZS5oIgpAQCAtMTA3LDcgKzEwOCw3IEBAIHN0YXRpYyBpbnQJYm90dG9tdXBf c29ydF9hbmRfc2hyaW5rKFRNX0luZGV4RGVsZXRlT3AgKmRlbHN0YXRlKTsKIHN0YXRpYyBYTG9n UmVjUHRyIGxvZ19oZWFwX25ld19jaWQoUmVsYXRpb24gcmVsYXRpb24sIEhlYXBUdXBsZSB0dXAp Owogc3RhdGljIEhlYXBUdXBsZSBFeHRyYWN0UmVwbGljYUlkZW50aXR5KFJlbGF0aW9uIHJlbGF0 aW9uLCBIZWFwVHVwbGUgdHAsIGJvb2wga2V5X3JlcXVpcmVkLAogCQkJCQkJCQkJCWJvb2wgKmNv cHkpOwotCitzdGF0aWMgdm9pZCBoZWFwX21vZGlmeV9pbnNlcnRfZW5kKFRhYmxlTW9kaWZ5U3Rh dGUgKnN0YXRlKTsKIAogLyoKICAqIEVhY2ggdHVwbGUgbG9jayBtb2RlIGhhcyBhIGNvcnJlc3Bv bmRpbmcgaGVhdnl3ZWlnaHQgbG9jaywgYW5kIG9uZSBvciB0d28KQEAgLTI0MzksNiArMjQ0MCwx ODEgQEAgaGVhcF9tdWx0aV9pbnNlcnQoUmVsYXRpb24gcmVsYXRpb24sIFR1cGxlVGFibGVTbG90 ICoqc2xvdHMsIGludCBudHVwbGVzLAogCXBnc3RhdF9jb3VudF9oZWFwX2luc2VydChyZWxhdGlv biwgbnR1cGxlcyk7CiB9CiAKKy8qCisgKiBJbml0aWFsaXplIGhlYXAgbW9kaWZ5IHN0YXRlLgor ICovCitUYWJsZU1vZGlmeVN0YXRlICoKK2hlYXBfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwg aW50IGZsYWdzKQoreworCVRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlOworCU1lbW9yeUNvbnRleHQg Y29udGV4dDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisKKwljb250ZXh0ID0gQWxsb2NT ZXRDb250ZXh0Q3JlYXRlKEN1cnJlbnRNZW1vcnlDb250ZXh0LAorCQkJCQkJCQkJImhlYXBfbW9k aWZ5IG1lbW9yeSBjb250ZXh0IiwKKwkJCQkJCQkJCUFMTE9DU0VUX0RFRkFVTFRfU0laRVMpOwor CisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhjb250ZXh0KTsKKwlzdGF0ZSA9 IHBhbGxvYzAoc2l6ZW9mKFRhYmxlTW9kaWZ5U3RhdGUpKTsKKwlzdGF0ZS0+cmVsID0gcmVsOwor CXN0YXRlLT5mbGFncyA9IGZsYWdzOworCXN0YXRlLT5tY3R4ID0gY29udGV4dDsKKwlzdGF0ZS0+ ZW5kX2NiID0gTlVMTDsJCS8qIFRvIGJlIGluc3RhbGxlZCBsYXppbHkgKi8KKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwlyZXR1cm4gc3RhdGU7Cit9CisKKy8qCisgKiBT dG9yZSBwYXNzZWQtaW4gdHVwbGUgaW50byBpbi1tZW1vcnkgYnVmZmVyZWQgc2xvdHMuIFdoZW4g ZnVsbCwgaW5zZXJ0CisgKiBtdWx0aXBsZSB0dXBsZXMgZnJvbSB0aGUgYnVmZmVycyBpbnRvIGhl YXAuCisgKi8KK3ZvaWQKK2hlYXBfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0 ZSAqc3RhdGUsIENvbW1hbmRJZCBjaWQsCisJCQkJCQkgIGludCBvcHRpb25zLCBUdXBsZVRhYmxl U2xvdCAqc2xvdCkKK3sKKwlUdXBsZVRhYmxlU2xvdCAqZHN0c2xvdDsKKwlIZWFwSW5zZXJ0U3Rh dGUgKmlzdGF0ZTsKKwlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZTsKKwlNZW1vcnlDb250 ZXh0IG9sZGNvbnRleHQ7CisKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKHN0 YXRlLT5tY3R4KTsKKworCS8qIEZpcnN0IHRpbWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBoZWFwIGlu c2VydCBzdGF0ZSAqLworCWlmIChzdGF0ZS0+ZGF0YSA9PSBOVUxMKQorCXsKKwkJaXN0YXRlID0g KEhlYXBJbnNlcnRTdGF0ZSAqKSBwYWxsb2MwKHNpemVvZihIZWFwSW5zZXJ0U3RhdGUpKTsKKwkJ aXN0YXRlLT5iaXN0YXRlID0gTlVMTDsKKwkJaXN0YXRlLT5taXN0YXRlID0gTlVMTDsKKwkJc3Rh dGUtPmRhdGEgPSBpc3RhdGU7CisKKwkJaWYgKChzdGF0ZS0+ZmxhZ3MgJiBUTV9GTEFHX01VTFRJ X0lOU0VSVFMpICE9IDApCisJCXsKKwkJCW1pc3RhdGUgPSAoSGVhcE11bHRpSW5zZXJ0U3RhdGUg KikgcGFsbG9jMChzaXplb2YoSGVhcE11bHRpSW5zZXJ0U3RhdGUpKTsKKwkJCW1pc3RhdGUtPnNs b3RzID0gKFR1cGxlVGFibGVTbG90ICoqKSBwYWxsb2MwKHNpemVvZihUdXBsZVRhYmxlU2xvdCAq KSAqIEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTKTsKKwkJCWlzdGF0ZS0+bWlzdGF0ZSA9IG1pc3Rh dGU7CisJCX0KKworCQlpZiAoKHN0YXRlLT5mbGFncyAmIFRNX0ZMQUdfQkFTX0JVTEtXUklURSkg IT0gMCkKKwkJCWlzdGF0ZS0+YmlzdGF0ZSA9IEdldEJ1bGtJbnNlcnRTdGF0ZSgpOworCisJCXN0 YXRlLT5lbmRfY2IgPSBoZWFwX21vZGlmeV9pbnNlcnRfZW5kOworCX0KKworCWlzdGF0ZSA9IChI ZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisJQXNzZXJ0KGlzdGF0ZS0+bWlzdGF0ZSAh PSBOVUxMKTsKKwltaXN0YXRlID0gaXN0YXRlLT5taXN0YXRlOworCUFzc2VydChpc3RhdGUtPmJp c3RhdGUgIT0gTlVMTCk7CisKKwlkc3RzbG90ID0gbWlzdGF0ZS0+c2xvdHNbbWlzdGF0ZS0+Y3Vy X3Nsb3RzXTsKKwlpZiAoZHN0c2xvdCA9PSBOVUxMKQorCXsKKwkJLyoKKwkJICogV2UgdXNlIHZp cnR1YWwgdHVwbGUgc2xvdHMgYnVmZmVyZWQgc2xvdHMgZm9yIGxldmVyYWdpbmcgdGhlCisJCSAq IG9wdGltaXphdGlvbiBpdCBwcm92aWRlcyB0byBtaW5pbWl6ZSBwaHlzaWNhbCBkYXRhIGNvcHlp bmcuIFRoZQorCQkgKiB2aXJ0dWFsIHNsb3QgZ2V0cyBtYXRlcmlhbGl6ZWQgd2hlbiB3ZSBjb3B5 ICh2aWEgYmVsb3cKKwkJICogRXhlY0NvcHlTbG90KSB0aGUgdHVwbGVzIGZyb20gdGhlIHNvdXJj ZSBzbG90IHdoaWNoIGNhbiBiZSBvZiBhbnkKKwkJICogdHlwZS4gVGhpcyB3YXksIGl0IGlzIGVu c3VyZWQgdGhhdCB0aGUgdHVwbGUgc3RvcmFnZSBkb2Vzbid0IGRlcGVuZAorCQkgKiBvbiBleHRl cm5hbCBtZW1vcnksIGJlY2F1c2UgYWxsIHRoZSBkYXR1bXMgdGhhdCBhcmVuJ3QgcGFzc2VkIGJ5 CisJCSAqIHZhbHVlIGFyZSBjb3BpZWQgaW50byB0aGUgc2xvdCdzIG1lbW9yeSBjb250ZXh0Lgor CQkgKi8KKwkJZHN0c2xvdCA9IE1ha2VUdXBsZVRhYmxlU2xvdChSZWxhdGlvbkdldERlc2NyKHN0 YXRlLT5yZWwpLAorCQkJCQkJCQkJICZUVFNPcHNWaXJ0dWFsKTsKKwkJbWlzdGF0ZS0+c2xvdHNb bWlzdGF0ZS0+Y3VyX3Nsb3RzXSA9IGRzdHNsb3Q7CisJfQorCisJRXhlY0NsZWFyVHVwbGUoZHN0 c2xvdCk7CisJRXhlY0NvcHlTbG90KGRzdHNsb3QsIHNsb3QpOworCisJbWlzdGF0ZS0+Y3VyX3Ns b3RzKys7CisKKwkvKgorCSAqIE1lbW9yeSBhbGxvY2F0ZWQgZm9yIHRoZSB3aG9sZSB0dXBsZSBp cyBpbiBzbG90J3MgbWVtb3J5IGNvbnRleHQsIHNvCisJICogdXNlIGl0IGtlZXAgdHJhY2sgb2Yg dGhlIHRvdGFsIHNwYWNlIG9jY3VwaWVkIGJ5IGFsbCBidWZmZXJlZCB0dXBsZXMuCisJICovCisJ aWYgKFRUU19TSE9VTERGUkVFKGRzdHNsb3QpKQorCQltaXN0YXRlLT5jdXJfc2l6ZSArPSBNZW1v cnlDb250ZXh0TWVtQWxsb2NhdGVkKGRzdHNsb3QtPnR0c19tY3h0LCBmYWxzZSk7CisKKwlpZiAo bWlzdGF0ZS0+Y3VyX3Nsb3RzID49IEhFQVBfTUFYX0JVRkZFUkVEX1NMT1RTIHx8CisJCW1pc3Rh dGUtPmN1cl9zaXplID49IEhFQVBfTUFYX0JVRkZFUkVEX0JZVEVTKQorCQloZWFwX21vZGlmeV9i dWZmZXJfZmx1c2goc3RhdGUsIGNpZCwgb3B0aW9ucyk7CisKKwlNZW1vcnlDb250ZXh0U3dpdGNo VG8ob2xkY29udGV4dCk7Cit9CisKKy8qCisgKiBJbnNlcnQgbXVsdGlwbGUgdHVwbGVzIGZyb20g aW4tbWVtb3J5IGJ1ZmZlcmVkIHNsb3RzIGludG8gaGVhcC4KKyAqLwordm9pZAoraGVhcF9tb2Rp ZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLCBDb21tYW5kSWQgY2lkLAor CQkJCQkJIGludCBvcHRpb25zKQoreworCUhlYXBJbnNlcnRTdGF0ZSAqaXN0YXRlOworCUhlYXBN dWx0aUluc2VydFN0YXRlICptaXN0YXRlOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwor CS8qIFF1aWNrIGV4aXQgaWYgd2UgaGF2ZW4ndCBpbnNlcnRlZCBhbnl0aGluZyB5ZXQgKi8KKwlp ZiAoc3RhdGUtPmRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuOworCisJaXN0YXRlID0gKEhlYXBJbnNl cnRTdGF0ZSAqKSBzdGF0ZS0+ZGF0YTsKKwlBc3NlcnQoaXN0YXRlLT5taXN0YXRlICE9IE5VTEwp OworCW1pc3RhdGUgPSBpc3RhdGUtPm1pc3RhdGU7CisJQXNzZXJ0KGlzdGF0ZS0+YmlzdGF0ZSAh PSBOVUxMKTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RhdGUtPm1j dHgpOworCisJaGVhcF9tdWx0aV9pbnNlcnQoc3RhdGUtPnJlbCwgbWlzdGF0ZS0+c2xvdHMsIG1p c3RhdGUtPmN1cl9zbG90cywKKwkJCQkJICBjaWQsIG9wdGlvbnMsIGlzdGF0ZS0+YmlzdGF0ZSk7 CisKKwltaXN0YXRlLT5jdXJfc2xvdHMgPSAwOworCW1pc3RhdGUtPmN1cl9zaXplID0gMDsKKwor CU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKK30KKworLyoKKyAqIEhlYXAgaW5z ZXJ0IHNwZWNpZmljIGNhbGxiYWNrIHVzZWQgZm9yIGNsZWFuaW5nIHVwIHRoZSBpbnNlcnQgc3Rh dGUgYW5kCisgKiBidWZmZXJlZCBzbG90cy4KKyAqLworc3RhdGljIHZvaWQKK2hlYXBfbW9kaWZ5 X2luc2VydF9lbmQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUpCit7CisJSGVhcEluc2VydFN0YXRl ICppc3RhdGU7CisKKwkvKiBRdWljayBleGl0IGlmIHdlIGhhdmVuJ3QgaW5zZXJ0ZWQgYW55dGhp bmcgeWV0ICovCisJaWYgKHN0YXRlLT5kYXRhID09IE5VTEwpCisJCXJldHVybjsKKworCWlzdGF0 ZSA9IChIZWFwSW5zZXJ0U3RhdGUgKikgc3RhdGUtPmRhdGE7CisKKwlpZiAoaXN0YXRlLT5taXN0 YXRlICE9IE5VTEwpCisJeworCQlIZWFwTXVsdGlJbnNlcnRTdGF0ZSAqbWlzdGF0ZSA9IGlzdGF0 ZS0+bWlzdGF0ZTsKKworCQlBc3NlcnQobWlzdGF0ZS0+Y3VyX3Nsb3RzID09IDAgJiYKKwkJCSAg IG1pc3RhdGUtPmN1cl9zaXplID09IDApOworCisJCWZvciAoaW50IGkgPSAwOyBpIDwgSEVBUF9N QVhfQlVGRkVSRURfU0xPVFMgJiYgbWlzdGF0ZS0+c2xvdHNbaV0gIT0gTlVMTDsgaSsrKQorCQkJ RXhlY0Ryb3BTaW5nbGVUdXBsZVRhYmxlU2xvdChtaXN0YXRlLT5zbG90c1tpXSk7CisJfQorCisJ aWYgKGlzdGF0ZS0+YmlzdGF0ZSAhPSBOVUxMKQorCQlGcmVlQnVsa0luc2VydFN0YXRlKGlzdGF0 ZS0+YmlzdGF0ZSk7Cit9CisKKy8qCisgKiBDbGVhbiBoZWFwIG1vZGlmeSBzdGF0ZS4KKyAqLwor dm9pZAoraGVhcF9tb2RpZnlfZW5kKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlKQoreworCWlmIChz dGF0ZS0+ZW5kX2NiICE9IE5VTEwpCisJCXN0YXRlLT5lbmRfY2Ioc3RhdGUpOworCisJTWVtb3J5 Q29udGV4dERlbGV0ZShzdGF0ZS0+bWN0eCk7Cit9CisKIC8qCiAgKglzaW1wbGVfaGVhcF9pbnNl cnQgLSBpbnNlcnQgYSB0dXBsZQogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFu ZGxlci5jCmluZGV4IDZhYmZlMzZkZWMuLjUyY2NmODM3N2YgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMjYyMiw2ICsyNjIyLDEyIEBAIHN0YXRpYyBjb25z dCBUYWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkudHVwbGVfaW5zZXJ0X3NwZWN1 bGF0aXZlID0gaGVhcGFtX3R1cGxlX2luc2VydF9zcGVjdWxhdGl2ZSwKIAkudHVwbGVfY29tcGxl dGVfc3BlY3VsYXRpdmUgPSBoZWFwYW1fdHVwbGVfY29tcGxldGVfc3BlY3VsYXRpdmUsCiAJLm11 bHRpX2luc2VydCA9IGhlYXBfbXVsdGlfaW5zZXJ0LAorCisJLnR1cGxlX21vZGlmeV9iZWdpbiA9 IGhlYXBfbW9kaWZ5X2JlZ2luLAorCS50dXBsZV9tb2RpZnlfYnVmZmVyX2luc2VydCA9IGhlYXBf bW9kaWZ5X2J1ZmZlcl9pbnNlcnQsCisJLnR1cGxlX21vZGlmeV9idWZmZXJfZmx1c2ggPSBoZWFw X21vZGlmeV9idWZmZXJfZmx1c2gsCisJLnR1cGxlX21vZGlmeV9lbmQgPSBoZWFwX21vZGlmeV9l bmQsCisKIAkudHVwbGVfZGVsZXRlID0gaGVhcGFtX3R1cGxlX2RlbGV0ZSwKIAkudHVwbGVfdXBk YXRlID0gaGVhcGFtX3R1cGxlX3VwZGF0ZSwKIAkudHVwbGVfbG9jayA9IGhlYXBhbV90dXBsZV9s b2NrLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1hcGkuYyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90YWJsZS90YWJsZWFtYXBpLmMKaW5kZXggY2U2MzdhNWE1ZC4u MzEwNGQxOWZkOCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RhYmxlL3RhYmxlYW1h cGkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdGFibGUvdGFibGVhbWFwaS5jCkBAIC02NCw2 ICs2NCwxMSBAQCBHZXRUYWJsZUFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCiAJQXNzZXJ0KHJv dXRpbmUtPnR1cGxlX2luc2VydCAhPSBOVUxMKTsKIAorCUFzc2VydChyb3V0aW5lLT50dXBsZV9t b2RpZnlfYmVnaW4gIT0gTlVMTCk7CisJQXNzZXJ0KHJvdXRpbmUtPnR1cGxlX21vZGlmeV9idWZm ZXJfaW5zZXJ0ICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2RpZnlfYnVmZmVy X2ZsdXNoICE9IE5VTEwpOworCUFzc2VydChyb3V0aW5lLT50dXBsZV9tb2RpZnlfaW5zZXJ0X2Vu ZCAhPSBOVUxMKTsKKwogCS8qCiAJICogQ291bGQgYmUgbWFkZSBvcHRpb25hbCwgYnV0IHdvdWxk IHJlcXVpcmUgdGhyb3dpbmcgZXJyb3IgZHVyaW5nCiAJICogcGFyc2UtYW5hbHlzaXMuCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKaW5kZXggZjExMjI0NTM3My4uMjY0MDMzNDJkYiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApA QCAtMjMzLDYgKzIzMywzNiBAQCBodHN2X2dldF92YWxpZF9zdGF0dXMoaW50IHN0YXR1cykKIAly ZXR1cm4gKEhUU1ZfUmVzdWx0KSBzdGF0dXM7CiB9CiAKKy8qCisgKiBNYXhpbXVtIG51bWJlciBv ZiBzbG90cyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xkLgorICoKKyAqIENhdXRp b246IERvbid0IG1ha2UgdGhpcyB0b28gYmlnLCBhcyB3ZSBjb3VsZCBlbmQgdXAgd2l0aCB0aGlz IG1hbnkgdHVwbGVzCisgKiBzdG9yZWQgaW4gbXVsdGkgaW5zZXJ0IGJ1ZmZlci4KKyAqLworI2Rl ZmluZSBIRUFQX01BWF9CVUZGRVJFRF9TTE9UUwkJMTAwMAorCisvKiBNYXhpbXVtIHNpemUgb2Yg YWxsIHR1cGxlcyB0aGF0IG11bHRpLWluc2VydCBidWZmZXJzIGNhbiBob2xkICovCisjZGVmaW5l IEhFQVBfTUFYX0JVRkZFUkVEX0JZVEVTCQk2NTUzNQorCit0eXBlZGVmIHN0cnVjdCBIZWFwTXVs dGlJbnNlcnRTdGF0ZQoreworCS8qIEFycmF5IG9mIGJ1ZmZlcmVkIHNsb3RzICovCisJVHVwbGVU YWJsZVNsb3QgKipzbG90czsKKworCS8qIE51bWJlciBvZiBidWZmZXJlZCBzbG90cyBjdXJyZW50 bHkgaGVsZCAqLworCWludAkJCWN1cl9zbG90czsKKworCS8qIEFwcHJveGltYXRlIHNpemUgb2Yg YWxsIHR1cGxlcyBjdXJyZW50bHkgaGVsZCBpbiBidWZmZXJlZCBzbG90cyAqLworCVNpemUJCWN1 cl9zaXplOworfSBIZWFwTXVsdGlJbnNlcnRTdGF0ZTsKKwordHlwZWRlZiBzdHJ1Y3QgSGVhcElu c2VydFN0YXRlCit7CisJc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGU7CisJSGVh cE11bHRpSW5zZXJ0U3RhdGUgKm1pc3RhdGU7Cit9IEhlYXBJbnNlcnRTdGF0ZTsKKworCiAvKiAt LS0tLS0tLS0tLS0tLS0tCiAgKgkJZnVuY3Rpb24gcHJvdG90eXBlcyBmb3IgaGVhcCBhY2Nlc3Mg bWV0aG9kCiAgKgpAQCAtMjgzLDYgKzMxMywyMSBAQCBleHRlcm4gdm9pZCBoZWFwX2luc2VydChS ZWxhdGlvbiByZWxhdGlvbiwgSGVhcFR1cGxlIHR1cCwgQ29tbWFuZElkIGNpZCwKIGV4dGVybiB2 b2lkIGhlYXBfbXVsdGlfaW5zZXJ0KFJlbGF0aW9uIHJlbGF0aW9uLCBzdHJ1Y3QgVHVwbGVUYWJs ZVNsb3QgKipzbG90cywKIAkJCQkJCQkgIGludCBudHVwbGVzLCBDb21tYW5kSWQgY2lkLCBpbnQg b3B0aW9ucywKIAkJCQkJCQkgIEJ1bGtJbnNlcnRTdGF0ZSBiaXN0YXRlKTsKKworZXh0ZXJuIFRh YmxlTW9kaWZ5U3RhdGUgKmhlYXBfbW9kaWZ5X2JlZ2luKFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJ CQkgICBpbnQgZmxhZ3MpOworCitleHRlcm4gdm9pZCBoZWFwX21vZGlmeV9idWZmZXJfaW5zZXJ0 KFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJICBDb21tYW5kSWQgY2lkLAorCQkJ CQkJCQkJICBpbnQgb3B0aW9ucywKKwkJCQkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwor CitleHRlcm4gdm9pZCBoZWFwX21vZGlmeV9idWZmZXJfZmx1c2goVGFibGVNb2RpZnlTdGF0ZSAq c3RhdGUsCisJCQkJCQkJCQkgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCSBpbnQgb3B0aW9ucyk7 CisKK2V4dGVybiB2b2lkIGhlYXBfbW9kaWZ5X2VuZChUYWJsZU1vZGlmeVN0YXRlICpzdGF0ZSk7 CisKIGV4dGVybiBUTV9SZXN1bHQgaGVhcF9kZWxldGUoUmVsYXRpb24gcmVsYXRpb24sIEl0ZW1Q b2ludGVyIHRpZCwKIAkJCQkJCQkgQ29tbWFuZElkIGNpZCwgU25hcHNob3QgY3Jvc3NjaGVjaywg aW50IG9wdGlvbnMsCiAJCQkJCQkJIHN0cnVjdCBUTV9GYWlsdXJlRGF0YSAqdG1mZCwgYm9vbCBj aGFuZ2luZ1BhcnQsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oIGIv c3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaAppbmRleCBmYzBlNzAyNzE1Li4xMDljYmI3Njli IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBiL3NyYy9pbmNs dWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTI0Nyw2ICsyNDcsMzIgQEAgdHlwZWRlZiBzdHJ1Y3Qg VE1fSW5kZXhEZWxldGVPcAogCVRNX0luZGV4U3RhdHVzICpzdGF0dXM7CiB9IFRNX0luZGV4RGVs ZXRlT3A7CiAKKy8qIFRhYmxlIG1vZGlmeSBmbGFncyAqLworCisvKiBVc2UgbXVsdGkgaW5zZXJ0 cywgaS5lLiBidWZmZXIgbXVsdGlwbGUgdHVwbGVzIGFuZCBpbnNlcnQgdGhlbSBhdCBvbmNlICov CisjZGVmaW5lIFRNX0ZMQUdfTVVMVElfSU5TRVJUUwkweDAwMDAwMQorCisvKiBVc2UgQkFTX0JV TEtXUklURSBidWZmZXIgYWNjZXNzIHN0cmF0ZWd5ICovCisjZGVmaW5lIFRNX0ZMQUdfQkFTX0JV TEtXUklURQkweDAwMDAwMgorCitzdHJ1Y3QgVGFibGVNb2RpZnlTdGF0ZTsKKworLyogVGFibGUg QU0gc3BlY2lmaWMgY2FsbGJhY2sgdGhhdCBnZXRzIGNhbGxlZCBpbiB0YWJsZV9tb2RpZnlfZW5k KCkgKi8KK3R5cGVkZWYgdm9pZCAoKlRhYmxlTW9kaWZ5RW5kQ1ApIChzdHJ1Y3QgVGFibGVNb2Rp ZnlTdGF0ZSAqc3RhdGUpOworCisvKiBIb2xkcyB0YWJsZSBtb2RpZnkgc3RhdGUgKi8KK3R5cGVk ZWYgc3RydWN0IFRhYmxlTW9kaWZ5U3RhdGUKK3sKKwlSZWxhdGlvbglyZWw7CisJaW50CQkJZmxh Z3M7CisJTWVtb3J5Q29udGV4dCBtY3R4OworCisJLyogVGFibGUgQU0gc3BlY2lmaWMgZGF0YSBz dGFydHMgaGVyZSAqLworCXZvaWQJICAgKmRhdGE7CisKKwlUYWJsZU1vZGlmeUVuZENQIGVuZF9j YjsKK30gVGFibGVNb2RpZnlTdGF0ZTsKKwogLyogIm9wdGlvbnMiIGZsYWcgYml0cyBmb3IgdGFi bGVfdHVwbGVfaW5zZXJ0ICovCiAvKiBUQUJMRV9JTlNFUlRfU0tJUF9XQUwgd2FzIDB4MDAwMTsg UmVsYXRpb25OZWVkc1dBTCgpIG5vdyBnb3Zlcm5zICovCiAjZGVmaW5lIFRBQkxFX0lOU0VSVF9T S0lQX0ZTTQkJMHgwMDAyCkBAIC01MzEsNiArNTU3LDIwIEBAIHR5cGVkZWYgc3RydWN0IFRhYmxl QW1Sb3V0aW5lCiAJdm9pZAkJKCptdWx0aV9pbnNlcnQpIChSZWxhdGlvbiByZWwsIFR1cGxlVGFi bGVTbG90ICoqc2xvdHMsIGludCBuc2xvdHMsCiAJCQkJCQkJCSBDb21tYW5kSWQgY2lkLCBpbnQg b3B0aW9ucywgc3RydWN0IEJ1bGtJbnNlcnRTdGF0ZURhdGEgKmJpc3RhdGUpOwogCisJVGFibGVN b2RpZnlTdGF0ZSAqKCp0dXBsZV9tb2RpZnlfYmVnaW4pIChSZWxhdGlvbiByZWwsCisJCQkJCQkJ CQkJCSBpbnQgZmxhZ3MpOworCisJdm9pZAkJKCp0dXBsZV9tb2RpZnlfYnVmZmVyX2luc2VydCkg KFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLAorCQkJCQkJCQkJCQkgICBDb21tYW5kSWQgY2lkLAor CQkJCQkJCQkJCQkgICBpbnQgb3B0aW9ucywKKwkJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3Qg KnNsb3QpOworCisJdm9pZAkJKCp0dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKSAoVGFibGVNb2Rp ZnlTdGF0ZSAqc3RhdGUsCisJCQkJCQkJCQkJCSAgQ29tbWFuZElkIGNpZCwKKwkJCQkJCQkJCQkJ ICBpbnQgb3B0aW9ucyk7CisKKwl2b2lkCQkoKnR1cGxlX21vZGlmeV9lbmQpIChUYWJsZU1vZGlm eVN0YXRlICpzdGF0ZSk7CisKIAkvKiBzZWUgdGFibGVfdHVwbGVfZGVsZXRlKCkgZm9yIHJlZmVy ZW5jZSBhYm91dCBwYXJhbWV0ZXJzICovCiAJVE1fUmVzdWx0CSgqdHVwbGVfZGVsZXRlKSAoUmVs YXRpb24gcmVsLAogCQkJCQkJCQkgSXRlbVBvaW50ZXIgdGlkLApAQCAtMTQ3Myw2ICsxNTEzLDMz IEBAIHRhYmxlX211bHRpX2luc2VydChSZWxhdGlvbiByZWwsIFR1cGxlVGFibGVTbG90ICoqc2xv dHMsIGludCBuc2xvdHMsCiAJCQkJCQkJCSAgY2lkLCBvcHRpb25zLCBiaXN0YXRlKTsKIH0KIAor c3RhdGljIGlubGluZSBUYWJsZU1vZGlmeVN0YXRlICoKK3RhYmxlX21vZGlmeV9iZWdpbihSZWxh dGlvbiByZWwsIGludCBmbGFncykKK3sKKwlyZXR1cm4gcmVsLT5yZF90YWJsZWFtLT50dXBsZV9t b2RpZnlfYmVnaW4ocmVsLCBmbGFncyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAordGFibGVf bW9kaWZ5X2J1ZmZlcl9pbnNlcnQoVGFibGVNb2RpZnlTdGF0ZSAqc3RhdGUsIENvbW1hbmRJZCBj aWQsCisJCQkJCQkgICBpbnQgb3B0aW9ucywgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJc3Rh dGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQoc3RhdGUsIGNp ZCwKKwkJCQkJCQkJCQkJCQkgICBvcHRpb25zLCBzbG90KTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCit0YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKFRhYmxlTW9kaWZ5U3RhdGUgKnN0YXRlLCBD b21tYW5kSWQgY2lkLAorCQkJCQkJICBpbnQgb3B0aW9ucykKK3sKKwlzdGF0ZS0+cmVsLT5yZF90 YWJsZWFtLT50dXBsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKHN0YXRlLCBjaWQsIG9wdGlvbnMpOwor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK3RhYmxlX21vZGlmeV9lbmQoVGFibGVNb2RpZnlTdGF0 ZSAqc3RhdGUpCit7CisJc3RhdGUtPnJlbC0+cmRfdGFibGVhbS0+dHVwbGVfbW9kaWZ5X2VuZChz dGF0ZSk7Cit9CisKIC8qCiAgKiBEZWxldGUgYSB0dXBsZSAoYW5kIG9wdGlvbmFsbHkgbG9jayB0 aGUgbGFzdCB0dXBsZSB2ZXJzaW9uKS4KICAqCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4 IGNmYTlkNWFhZWEuLjhjZThhYWU5NTUgMTAwNjQ0Ci0tLSBhL3NyYy90b29scy9wZ2luZGVudC90 eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CkBAIC0x MTIyLDYgKzExMjIsOCBAQCBIZWFkbGluZUpzb25TdGF0ZQogSGVhZGxpbmVQYXJzZWRUZXh0CiBI ZWFkbGluZVdvcmRFbnRyeQogSGVhcENoZWNrQ29udGV4dAorSGVhcEluc2VydFN0YXRlCitIZWFw TXVsdGlJbnNlcnRTdGF0ZQogSGVhcFBhZ2VGcmVlemUKIEhlYXBTY2FuRGVzYwogSGVhcFR1cGxl CkBAIC0yODA4LDYgKzI4MTAsNyBAQCBUYWJsZUZ1bmNTY2FuCiBUYWJsZUZ1bmNTY2FuU3RhdGUK IFRhYmxlSW5mbwogVGFibGVMaWtlQ2xhdXNlCitUYWJsZU1vZGlmeVN0YXRlCiBUYWJsZVNhbXBs ZUNsYXVzZQogVGFibGVTY2FuRGVzYwogVGFibGVTY2FuRGVzY0RhdGEKLS0gCjIuMzQuMQoK --000000000000ad7d920614959845 Content-Type: application/octet-stream; name="v15-0002-Optimize-CREATE-TABLE-AS-with-multi-inserts.patch" Content-Disposition: attachment; filename="v15-0002-Optimize-CREATE-TABLE-AS-with-multi-inserts.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu8s607t1 RnJvbSAxZmUyYmNlNmJlNDFmNTg3YmU4M2E4MzlmY2I2MDVmODUzZTMxOTJkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjYgTWFyIDIwMjQgMTk6MzM6NTEgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxNSAyLzNdIE9wdGltaXplIENSRUFURSBUQUJMRSBBUyB3aXRo IG11bHRpIGluc2VydHMKCi0tLQogc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYyB8IDIy ICsrKysrKysrKysrKy0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMiBpbnNlcnRpb25zKCsp LCAxMCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVh dGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3JlYXRlYXMuYwppbmRleCA2MjA1MGY0ZGM1 Li4wMjAxZjgxNjI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5j CisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMKQEAgLTU1LDcgKzU1LDcgQEAg dHlwZWRlZiBzdHJ1Y3QKIAlPYmplY3RBZGRyZXNzIHJlbGFkZHI7CQkvKiBhZGRyZXNzIG9mIHJl bCwgZm9yIEV4ZWNDcmVhdGVUYWJsZUFzICovCiAJQ29tbWFuZElkCW91dHB1dF9jaWQ7CQkvKiBj bWluIHRvIGluc2VydCBpbiBvdXRwdXQgdHVwbGVzICovCiAJaW50CQkJdGlfb3B0aW9uczsJCS8q IHRhYmxlX3R1cGxlX2luc2VydCBwZXJmb3JtYW5jZSBvcHRpb25zICovCi0JQnVsa0luc2VydFN0 YXRlIGJpc3RhdGU7CS8qIGJ1bGsgaW5zZXJ0IHN0YXRlICovCisJVGFibGVNb2RpZnlTdGF0ZSAq bXN0YXRlOwkvKiB0YWJsZSBpbnNlcnQgc3RhdGUgKi8KIH0gRFJfaW50b3JlbDsKIAogLyogdXRp bGl0eSBmdW5jdGlvbnMgZm9yIENUQVMgZGVmaW5pdGlvbiBjcmVhdGlvbiAqLwpAQCAtNTYwLDkg KzU2MCwxMSBAQCBpbnRvcmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0 aW9uLCBUdXBsZURlc2MgdHlwZWluZm8pCiAJICogYnVsayBpbnNlcnRzIGFzIHRoZXJlIGFyZSBu byB0dXBsZXMgdG8gaW5zZXJ0LgogCSAqLwogCWlmICghaW50by0+c2tpcERhdGEpCi0JCW15U3Rh dGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwkJbXlTdGF0ZS0+bXN0YXRlID0g dGFibGVfbW9kaWZ5X2JlZ2luKGludG9SZWxhdGlvbkRlc2MsCisJCQkJCQkJCQkJCSBUTV9GTEFH X01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJCQkgVE1fRkxBR19CQVNfQlVMS1dSSVRFKTsKIAll bHNlCi0JCW15U3RhdGUtPmJpc3RhdGUgPSBOVUxMOworCQlteVN0YXRlLT5tc3RhdGUgPSBOVUxM OwogCiAJLyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJl YWR5IHdyb3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTU5MCwxMSArNTkyLDEwIEBAIGludG9yZWxf cmVjZWl2ZShUdXBsZVRhYmxlU2xvdCAqc2xvdCwgRGVzdFJlY2VpdmVyICpzZWxmKQogCQkgKiB3 b3VsZCBub3QgYmUgY2hlYXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBhbGxvdyBhY2Nlc3Np bmcgcGVyLUFNCiAJCSAqIGRhdGEgKHNheSBhIHR1cGxlJ3MgeG1pbiksIGJ1dCBzaW5jZSB3ZSBk b24ndCBkbyB0aGF0IGhlcmUuLi4KIAkJICovCi0JCXRhYmxlX3R1cGxlX2luc2VydChteVN0YXRl LT5yZWwsCi0JCQkJCQkgICBzbG90LAotCQkJCQkJICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKLQkJ CQkJCSAgIG15U3RhdGUtPnRpX29wdGlvbnMsCi0JCQkJCQkgICBteVN0YXRlLT5iaXN0YXRlKTsK KwkJdGFibGVfbW9kaWZ5X2J1ZmZlcl9pbnNlcnQobXlTdGF0ZS0+bXN0YXRlLAorCQkJCQkJCQkg ICBteVN0YXRlLT5vdXRwdXRfY2lkLAorCQkJCQkJCQkgICBteVN0YXRlLT50aV9vcHRpb25zLAor CQkJCQkJCQkgICBzbG90KTsKIAl9CiAKIAkvKiBXZSBrbm93IHRoaXMgaXMgYSBuZXdseSBjcmVh dGVkIHJlbGF0aW9uLCBzbyB0aGVyZSBhcmUgbm8gaW5kZXhlcyAqLwpAQCAtNjEzLDggKzYxNCw5 IEBAIGludG9yZWxfc2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogCiAJaWYgKCFpbnRvLT5z a2lwRGF0YSkKIAl7Ci0JCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlTdGF0ZS0+YmlzdGF0ZSk7Ci0J CXRhYmxlX2ZpbmlzaF9idWxrX2luc2VydChteVN0YXRlLT5yZWwsIG15U3RhdGUtPnRpX29wdGlv bnMpOworCQl0YWJsZV9tb2RpZnlfYnVmZmVyX2ZsdXNoKG15U3RhdGUtPm1zdGF0ZSwgbXlTdGF0 ZS0+b3V0cHV0X2NpZCwKKwkJCQkJCQkJICBteVN0YXRlLT50aV9vcHRpb25zKTsKKwkJdGFibGVf bW9kaWZ5X2VuZChteVN0YXRlLT5tc3RhdGUpOwogCX0KIAogCS8qIGNsb3NlIHJlbCwgYnV0IGtl ZXAgbG9jayB1bnRpbCBjb21taXQgKi8KLS0gCjIuMzQuMQoK --000000000000ad7d920614959845 Content-Type: application/octet-stream; name="v15-0003-Optimize-REFRESH-MATERIALIZED-VIEW-with-multi-in.patch" Content-Disposition: attachment; filename="v15-0003-Optimize-REFRESH-MATERIALIZED-VIEW-with-multi-in.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lu8s62dc2 RnJvbSBhMTU3YWIyNWY0MzQyODY4MWM1ZDkwMTZlOTU1NTYxMjYxN2U0ZDliIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBCaGFyYXRoIFJ1cGlyZWRkeSA8YmhhcmF0aC5ydXBpcmVkZHlm b3Jwb3N0Z3Jlc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMjYgTWFyIDIwMjQgMTk6MzQ6MjkgKzAw MDAKU3ViamVjdDogW1BBVENIIHYxNSAzLzNdIE9wdGltaXplIFJFRlJFU0ggTUFURVJJQUxJWkVE IFZJRVcgd2l0aCBtdWx0aSBpbnNlcnRzCgotLS0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZp ZXcuYyB8IDIyICsrKysrKysrKysrLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMSBpbnNl cnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21t YW5kcy9tYXR2aWV3LmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9tYXR2aWV3LmMKaW5kZXggNmQw OWI3NTU1Ni4uNTYwYTM1OWRlMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvbWF0 dmlldy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL21hdHZpZXcuYwpAQCAtNTAsNyArNTAs NyBAQCB0eXBlZGVmIHN0cnVjdAogCVJlbGF0aW9uCXRyYW5zaWVudHJlbDsJLyogcmVsYXRpb24g dG8gd3JpdGUgdG8gKi8KIAlDb21tYW5kSWQJb3V0cHV0X2NpZDsJCS8qIGNtaW4gdG8gaW5zZXJ0 IGluIG91dHB1dCB0dXBsZXMgKi8KIAlpbnQJCQl0aV9vcHRpb25zOwkJLyogdGFibGVfdHVwbGVf aW5zZXJ0IHBlcmZvcm1hbmNlIG9wdGlvbnMgKi8KLQlCdWxrSW5zZXJ0U3RhdGUgYmlzdGF0ZTsJ LyogYnVsayBpbnNlcnQgc3RhdGUgKi8KKwlUYWJsZU1vZGlmeVN0YXRlICptc3RhdGU7CS8qIHRh YmxlIGluc2VydCBzdGF0ZSAqLwogfSBEUl90cmFuc2llbnRyZWw7CiAKIHN0YXRpYyBpbnQJbWF0 dmlld19tYWludGVuYW5jZV9kZXB0aCA9IDA7CkBAIC00NjAsNyArNDYwLDkgQEAgdHJhbnNpZW50 cmVsX3N0YXJ0dXAoRGVzdFJlY2VpdmVyICpzZWxmLCBpbnQgb3BlcmF0aW9uLCBUdXBsZURlc2Mg dHlwZWluZm8pCiAJbXlTdGF0ZS0+dHJhbnNpZW50cmVsID0gdHJhbnNpZW50cmVsOwogCW15U3Rh dGUtPm91dHB1dF9jaWQgPSBHZXRDdXJyZW50Q29tbWFuZElkKHRydWUpOwogCW15U3RhdGUtPnRp X29wdGlvbnMgPSBUQUJMRV9JTlNFUlRfU0tJUF9GU00gfCBUQUJMRV9JTlNFUlRfRlJPWkVOOwot CW15U3RhdGUtPmJpc3RhdGUgPSBHZXRCdWxrSW5zZXJ0U3RhdGUoKTsKKwlteVN0YXRlLT5tc3Rh dGUgPSB0YWJsZV9tb2RpZnlfYmVnaW4odHJhbnNpZW50cmVsLAorCQkJCQkJCQkJCSBUTV9GTEFH X01VTFRJX0lOU0VSVFMgfAorCQkJCQkJCQkJCSBUTV9GTEFHX0JBU19CVUxLV1JJVEUpOwogCiAJ LyoKIAkgKiBWYWxpZCBzbWdyX3RhcmdibG9jayBpbXBsaWVzIHNvbWV0aGluZyBhbHJlYWR5IHdy b3RlIHRvIHRoZSByZWxhdGlvbi4KQEAgLTQ4NSwxMiArNDg3LDEwIEBAIHRyYW5zaWVudHJlbF9y ZWNlaXZlKFR1cGxlVGFibGVTbG90ICpzbG90LCBEZXN0UmVjZWl2ZXIgKnNlbGYpCiAJICogY2hl YXAgZWl0aGVyLiBUaGlzIGFsc28gZG9lc24ndCBhbGxvdyBhY2Nlc3NpbmcgcGVyLUFNIGRhdGEg KHNheSBhCiAJICogdHVwbGUncyB4bWluKSwgYnV0IHNpbmNlIHdlIGRvbid0IGRvIHRoYXQgaGVy ZS4uLgogCSAqLwotCi0JdGFibGVfdHVwbGVfaW5zZXJ0KG15U3RhdGUtPnRyYW5zaWVudHJlbCwK LQkJCQkJICAgc2xvdCwKLQkJCQkJICAgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKLQkJCQkJICAgbXlT dGF0ZS0+dGlfb3B0aW9ucywKLQkJCQkJICAgbXlTdGF0ZS0+YmlzdGF0ZSk7CisJdGFibGVfbW9k aWZ5X2J1ZmZlcl9pbnNlcnQobXlTdGF0ZS0+bXN0YXRlLAorCQkJCQkJCSAgIG15U3RhdGUtPm91 dHB1dF9jaWQsCisJCQkJCQkJICAgbXlTdGF0ZS0+dGlfb3B0aW9ucywKKwkJCQkJCQkgICBzbG90 KTsKIAogCS8qIFdlIGtub3cgdGhpcyBpcyBhIG5ld2x5IGNyZWF0ZWQgcmVsYXRpb24sIHNvIHRo ZXJlIGFyZSBubyBpbmRleGVzICovCiAKQEAgLTUwNSw5ICs1MDUsOSBAQCB0cmFuc2llbnRyZWxf c2h1dGRvd24oRGVzdFJlY2VpdmVyICpzZWxmKQogewogCURSX3RyYW5zaWVudHJlbCAqbXlTdGF0 ZSA9IChEUl90cmFuc2llbnRyZWwgKikgc2VsZjsKIAotCUZyZWVCdWxrSW5zZXJ0U3RhdGUobXlT dGF0ZS0+YmlzdGF0ZSk7Ci0KLQl0YWJsZV9maW5pc2hfYnVsa19pbnNlcnQobXlTdGF0ZS0+dHJh bnNpZW50cmVsLCBteVN0YXRlLT50aV9vcHRpb25zKTsKKwl0YWJsZV9tb2RpZnlfYnVmZmVyX2Zs dXNoKG15U3RhdGUtPm1zdGF0ZSwgbXlTdGF0ZS0+b3V0cHV0X2NpZCwKKwkJCQkJCQkgIG15U3Rh dGUtPnRpX29wdGlvbnMpOworCXRhYmxlX21vZGlmeV9lbmQobXlTdGF0ZS0+bXN0YXRlKTsKIAog CS8qIGNsb3NlIHRyYW5zaWVudHJlbCwgYnV0IGtlZXAgbG9jayB1bnRpbCBjb21taXQgKi8KIAl0 YWJsZV9jbG9zZShteVN0YXRlLT50cmFuc2llbnRyZWwsIE5vTG9jayk7Ci0tIAoyLjM0LjEKCg== --000000000000ad7d920614959845--