Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bIYUY-0000N4-5U for pgadmin-hackers@arkaria.postgresql.org; Thu, 30 Jun 2016 09:42:38 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1bIYUX-0008R6-NR for pgadmin-hackers@arkaria.postgresql.org; Thu, 30 Jun 2016 09:42:37 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1bIYUW-0008Ns-9X for pgadmin-hackers@postgresql.org; Thu, 30 Jun 2016 09:42:36 +0000 Received: from mail-qk0-x235.google.com ([2607:f8b0:400d:c09::235]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1bIYUT-0006k1-AY for pgadmin-hackers@postgresql.org; Thu, 30 Jun 2016 09:42:35 +0000 Received: by mail-qk0-x235.google.com with SMTP id a125so135400507qkc.2 for ; Thu, 30 Jun 2016 02:42:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:from:date:message-id:subject:to; bh=6iAYB/zkbFSrNbag4TMLKMd2DkDRTJkM/fFlJbYN6Gg=; b=mzahpKZXNkmVQ8iq8lM8SCM2CKNWXssJ4Bc6Zojawypos+PsEgF7D5nc0QJCk+TJL9 DkFOgGZuvLAatn+oWiKW/WUfCFCI8aDmhl6o4z7w2T0GvVSTcTh0JmRI3vl3oZPqw4K1 zpg0g2o+ie6sty8u902jO38iKNjjJmt76WHH68/zBRliV8mFWSZtNACJf97FuyQhw1m1 5nASN7K5f/cJQi56hn/QHpj9S+IQ3KAHoxCI6SMWtJpFbcVXFJFItE0Jrlr2XuXMC+i4 lROrkKDYIw5bBWF4FdDw0aIOnEy7Oe9uw7tQBPXKMjaT5umcspE2kkbYu3fKwuOempfG NRuA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:from:date:message-id:subject:to; bh=6iAYB/zkbFSrNbag4TMLKMd2DkDRTJkM/fFlJbYN6Gg=; b=Ksmk19o4iebY3XV0LMaIWV+MWycp0T3Kq/KlqdSh/ZTu3iYu1QdPIANnvHwSE0ZtAr y3mBYRtFP3n87NpYw32YXw9LwINozeRSvsK/0ARjgQvyyrda9OSDZWiIFKROF5rEmTcA IhQpR8ePAr/K3UP7nfKJQG+xkYLPMR/hVJbj38TkTcd2PwH6yhYEiSTewJaEkta3sZJV h1MGVEUsS/YcdNsY4WgnKZfkAwGdXMBiyx5+n3T9OrWStKPxDF9i3LCEDDrpRPSDG6Gf fTdwxtn/dAZOBbxRA5GJYINOkqtjlQGDUnoTFL3G92x8Qh418HifJj0wcTRfnJoZ0TFk Nx9w== X-Gm-Message-State: ALyK8tJZm6WE3M02FLlVWv4a9eDsSbHXtAkPFBdaKH1PLGlgGCQblaGSeC4HQOS/yoeYpKo5ccLXxPchgDsPHfuf X-Received: by 10.13.221.214 with SMTP id g205mr5553314ywe.11.1467279751988; Thu, 30 Jun 2016 02:42:31 -0700 (PDT) MIME-Version: 1.0 Received: by 10.37.57.14 with HTTP; Thu, 30 Jun 2016 02:42:31 -0700 (PDT) From: Neel Patel Date: Thu, 30 Jun 2016 15:12:31 +0530 Message-ID: Subject: [pgAdmin4][runtime]: Download feature in runtime To: pgadmin-hackers Content-Type: multipart/mixed; boundary=94eb2c07636868647e05367bb0d7 X-Pg-Spam-Score: -2.6 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org --94eb2c07636868647e05367bb0d7 Content-Type: multipart/alternative; boundary=94eb2c07636868647a05367bb0d5 --94eb2c07636868647a05367bb0d5 Content-Type: text/plain; charset=UTF-8 Hi, Please find attached patch file for initial version of download file in runtime application. With this patch, we have implemented two features. *Feature 1 :- Normal "Download file" from runtime application* Previously "Download file" was not implemented in runtime application. With this patch file, we have handled Qt signal for download file properly. *Feature 2 :- "download" attribute support for 'a' tag for client side download* As per our knowledge, webkit has not implemented the download attribute at 'a' tag. Currently it shows under development from below link. https://bugreports.qt.io/browse/QTBUG-47732 We did not found any signal in Qt for download attribute feature but to implement this feature in runtime application, we added one workaround to make it work with download CSV file. When we click on download buttons, we are getting Qt signal "urlLinkClicked" and in that url we are finding "data:text/csv" from encoded URL generated from sqleditor. Once we found that tag then we are decoding the csv data and writing to file. Is that right approach ? Should we add our own custom mime-type to header ? Let us know your thoughts on this feature. Please review it and let us know comments. Thanks, Neel Patel --94eb2c07636868647a05367bb0d5 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

Please find attached patch file for= initial version of download file in runtime application.

With this patch, we have implemented two features.

Feature 1 :- Normal "Download file" from runtime appl= ication

Previously "Download file&= quot; was not implemented in runtime application.
With this patch= file, we have handled Qt signal for download file properly.

=
Feature 2 :- =C2=A0=C2=A0"download" attribute suppo= rt for 'a' tag for client side download

As per our knowledge, webkit has not implemented the download attr= ibute at 'a' tag.=C2=A0
Currently it shows under developm= ent from below link.


We did not found any signal in Qt for dow= nload attribute feature but to implement this feature in runtime applicatio= n, we added one workaround to make it work with download CSV file.

When we click on download buttons, we are getting Qt= signal "urlLinkClicked" and in that url we are finding "dat= a:text/csv" from encoded URL generated from sqleditor. Once we found t= hat tag then we are decoding the csv data and writing to file.
Is that right approach ? Should we add our own custom mime-typ= e to header ?
Let us know your thoughts on this feature.


Please review it and let us know comments.<= /div>

Thanks,
Neel Patel

<= /div> --94eb2c07636868647a05367bb0d5-- --94eb2c07636868647e05367bb0d7 Content-Type: application/octet-stream; name="download_runtime.patch" Content-Disposition: attachment; filename="download_runtime.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_iq24eksb0 ZGlmZiAtLWdpdCBhL3J1bnRpbWUvQnJvd3NlcldpbmRvdy5jcHAgYi9ydW50 aW1lL0Jyb3dzZXJXaW5kb3cuY3BwCmluZGV4IDU0MTljMGUuLmQzM2I1MTUg MTAwNjQ0Ci0tLSBhL3J1bnRpbWUvQnJvd3NlcldpbmRvdy5jcHAKKysrIGIv cnVudGltZS9Ccm93c2VyV2luZG93LmNwcApAQCAtMjMsNyArMjMsNiBAQAog I2luY2x1ZGUgPFFJbnB1dERpYWxvZz4KICNpbmNsdWRlIDxRTGluZUVkaXQ+ CiAjZW5kaWYKLQogLy8gQXBwIGhlYWRlcnMKICNpbmNsdWRlICJCcm93c2Vy V2luZG93LmgiCiAjaW5jbHVkZSAiQ29uZmlnV2luZG93LmgiCkBAIC00Miw2 ICs0MSwxMiBAQCBCcm93c2VyV2luZG93OjpCcm93c2VyV2luZG93KFFTdHJp bmcgdXJsKQogICAgIG1fd2lkZ2V0ID0gTlVMTDsKICAgICBtX3Rvb2xCdG5C YWNrID0gTlVMTDsKICAgICBtX3Rvb2xCdG5Gb3J3YXJkID0gTlVMTDsKKyAg ICBkb3dubG9hZFN0YXJ0ZWQgPSAwOworICAgIGlzX2Rvd25sb2FkX2NhbmNl bGVkID0gMDsKKyAgICBtX2ZpbGUgPSBOVUxMOworICAgIGRvd25sb2FkZWRG aWxlTmFtZSA9ICIiOworICAgIGRlZmF1bHRGaWxlTmFtZSA9ICIiOworICAg IHByb2dyZXNzRGxnID0gTlVMTDsKIAogICAgIG1fYXBwU2VydmVyVXJsID0g dXJsOwogCkBAIC04Myw2ICs4OCwxMSBAQCBCcm93c2VyV2luZG93OjpCcm93 c2VyV2luZG93KFFTdHJpbmcgdXJsKQogICAgIC8vIFJlZ2lzdGVyIHRoZSBz bG90IG9uIHRhYiBpbmRleCBjaGFuZ2UKICAgICBjb25uZWN0KG1fdGFiV2lk Z2V0LFNJR05BTChjdXJyZW50Q2hhbmdlZChpbnQgKSksdGhpcyxTTE9UKHRh YkluZGV4Q2hhbmdlZChpbnQgKSkpOwogCisgICAgLy8gTGlzdGVuIGZvciB0 aGUgZG93bmxvYWQgZmlsZSByZXF1ZXN0IGZyb20gdGhlIHdlYiBwYWdlCisg ICAgbV9tYWluV2ViVmlldy0+cGFnZSgpLT5zZXRGb3J3YXJkVW5zdXBwb3J0 ZWRDb250ZW50KHRydWUpOworICAgIGNvbm5lY3QobV9tYWluV2ViVmlldy0+ cGFnZSgpLCBTSUdOQUwoZG93bmxvYWRSZXF1ZXN0ZWQoY29uc3QgUU5ldHdv cmtSZXF1ZXN0ICYpKSwgdGhpcywgU0xPVChkb3dubG9hZChjb25zdCBRTmV0 d29ya1JlcXVlc3QgJikpKTsKKyAgICBjb25uZWN0KG1fbWFpbldlYlZpZXct PnBhZ2UoKSwgU0lHTkFMKHVuc3VwcG9ydGVkQ29udGVudChRTmV0d29ya1Jl cGx5KikpLCB0aGlzLCBTTE9UKHVuc3VwcG9ydGVkQ29udGVudChRTmV0d29y a1JlcGx5KikpKTsKKwogICAgIG1fbWFpbldlYlZpZXctPnBhZ2UoKS0+c2V0 TGlua0RlbGVnYXRpb25Qb2xpY3koUVdlYlBhZ2U6OkRlbGVnYXRlQWxsTGlu a3MpOwogCiAgICAgLy8gUmVzdG9yZSB0aGUgZ2VvbWV0cnkKQEAgLTE5OSw2 ICsyMDksMTkxIEBAIGludCBCcm93c2VyV2luZG93OjpmaW5kVVJMVGFiKGNv bnN0IFFVcmwgJm5hbWUpCiAgICAgcmV0dXJuIDA7CiB9CiAKKy8vIFRoaXMg c2xvdCB3aWxsIGJlIGNhbGxlZCB3aGVuIHVzZXIgcmlnaHQgY2xpY2sgdGhl IGRvd25sb2FkIGxpbmsgYW5kIHNlbGVjdCAiU2F2ZSBMaW5rLi4uIgordm9p ZCBCcm93c2VyV2luZG93Ojpkb3dubG9hZChjb25zdCBRTmV0d29ya1JlcXVl c3QgJnJlcXVlc3QpCit7CisgICAgaWYgKGRvd25sb2FkU3RhcnRlZCkKKyAg ICB7CisgICAgICAgIC8vSW5mb3JtIHRoZSB1c2VyIHRoYXQgb25lIGRvd25s b2FkIGFscmVhZHkgc3RhcnRlZAorICAgICAgICBRTWVzc2FnZUJveDo6aW5m b3JtYXRpb24odGhpcywgdHIoIkRvd25sb2FkIHdhcm5pbmciKSwgdHIoIkZp bGUgZG93bmxvYWQgYWxyZWFkeSBpbiBwcm9ncmVzcyAtICUxIikuYXJnKGRl ZmF1bHRGaWxlTmFtZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg ICAgZGVmYXVsdEZpbGVOYW1lID0gUUZpbGVJbmZvKHJlcXVlc3QudXJsKCku dG9TdHJpbmcoKSkuZmlsZU5hbWUoKTsKKyAgICBRU3RyaW5nIGZpbGVOYW1l ID0gUUZpbGVEaWFsb2c6OmdldFNhdmVGaWxlTmFtZSh0aGlzLCB0cigiU2F2 ZSBGaWxlIiksIGRlZmF1bHRGaWxlTmFtZSk7CisgICAgaWYgKGZpbGVOYW1l LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuOworICAgIGVsc2UKKyAgICB7 CisgICAgICAgIGRvd25sb2FkZWRGaWxlTmFtZSA9IGZpbGVOYW1lOworCisg ICAgICAgIFFOZXR3b3JrUmVxdWVzdCBuZXdSZXF1ZXN0ID0gcmVxdWVzdDsK KyAgICAgICAgbmV3UmVxdWVzdC5zZXRBdHRyaWJ1dGUoUU5ldHdvcmtSZXF1 ZXN0OjpVc2VyLCBmaWxlTmFtZSk7CisKKyAgICAgICAgUU9iamVjdCAqb2Jq X3dlYl9wYWdlID0gUU9iamVjdDo6c2VuZGVyKCk7CisgICAgICAgIGlmIChv Ympfd2ViX3BhZ2UgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAg UVdlYlBhZ2UgKnNlbmRlcl93ZWJfcGFnZSA9IGR5bmFtaWNfY2FzdDxRV2Vi UGFnZSo+KG9ial93ZWJfcGFnZSk7CisgICAgICAgICAgICBpZiAoc2VuZGVy X3dlYl9wYWdlICE9IE5VTEwpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgICAgUU5ldHdvcmtBY2Nlc3NNYW5hZ2VyICpuZXR3b3JrTWFuYWdlciA9 IHNlbmRlcl93ZWJfcGFnZS0+bmV0d29ya0FjY2Vzc01hbmFnZXIoKTsKKyAg ICAgICAgICAgICAgICBRTmV0d29ya1JlcGx5ICpyZXBseSA9IG5ldHdvcmtN YW5hZ2VyLT5nZXQobmV3UmVxdWVzdCk7CisgICAgICAgICAgICAgICAgaWYg KHJlcGx5ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgICAgICBkb3dubG9hZFN0YXJ0ZWQgPSAxOworICAgICAgICAgICAg ICAgICAgICBpc19kb3dubG9hZF9jYW5jZWxlZCA9IDA7CisgICAgICAgICAg ICAgICAgICAgIC8vIENvbm5lY3QgdGhlIHNpZ25hbCBmb3IgZG93bmxvYWRw cm9ncmVzcyBhbmQgZG93bmxvYWRGaW5pc2hlZCBmb3IgZmlsZSBkb3dubG9h ZAorICAgICAgICAgICAgICAgICAgICBjb25uZWN0KCByZXBseSwgU0lHTkFM KGRvd25sb2FkUHJvZ3Jlc3MocWludDY0LCBxaW50NjQpKSwgdGhpcywgU0xP VChkb3dubG9hZEZpbGVQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkpICk7Cisg ICAgICAgICAgICAgICAgICAgIGNvbm5lY3QoIHJlcGx5LCBTSUdOQUwoZmlu aXNoZWQoKSksIHRoaXMsIFNMT1QoZG93bmxvYWRGaW5pc2hlZCgpKSk7Cisg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9Cisg ICAgfQorfQorCisvL1RoaXMgc2xvdCB3aWxsIGNhbGxlZCBpbiBjaHVuayBh bmQgZ2l2ZSB0aGUgcHJvZ3Jlc3MgZm9yIHRoZSBmaWxlIGRvd25sb2FkCit2 b2lkIEJyb3dzZXJXaW5kb3c6OmRvd25sb2FkRmlsZVByb2dyZXNzKHFpbnQ2 NCByZWFkRGF0YSwgcWludDY0IHRvdGFsRGF0YSkKK3sKKyAgICBRTmV0d29y a1JlcGx5ICpyZXBseSA9ICgoUU5ldHdvcmtSZXBseSopc2VuZGVyKCkpOwor ICAgIFFOZXR3b3JrUmVxdWVzdCByZXF1ZXN0ID0gcmVwbHktPnJlcXVlc3Qo KTsKKyAgICBRVmFyaWFudCB2ID0gcmVxdWVzdC5hdHRyaWJ1dGUoUU5ldHdv cmtSZXF1ZXN0OjpVc2VyKTsKKworICAgIC8vIElzIGRvd25sb2FkIGlzIGNh bmNlbGVkIGJ5IHRoZSB1c2VyIHRoZW4gbm8gYWN0aW9uIGlzIHRha2VuLCBq dXN0IHJldHVybgorICAgIGlmIChpc19kb3dubG9hZF9jYW5jZWxlZCkKKyAg ICAgICAgcmV0dXJuOworCisgICAgaWYocmVwbHkgIT0gTlVMTCAmJiByZXBs eS0+ZXJyb3IoKSAhPSBRTmV0d29ya1JlcGx5OjpOb0Vycm9yKQorICAgIHsK KyAgICAgICAgcURlYnVnKCkgPDwgIk5ldHdvcmsgZXJyb3Igb2NjdXJlZCBk dXJpbmcgZG93bmxvZGluZyAiIDw8IGRlZmF1bHRGaWxlTmFtZSA8PCAiIGZp bGUiOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG93bmxv YWQgaXMgbm90IHlldCBzdGFydGVkIHNvIG9wZW4gdGhlIGZpbGUgZmlyc3Qg dGltZS4KKyAgICBpZiAoIW1fZmlsZSkKKyAgICB7CisgICAgICAgIG1fZmls ZSA9IG5ldyBRRmlsZShkb3dubG9hZGVkRmlsZU5hbWUpOworICAgICAgICBp ZiAoIW1fZmlsZS0+b3BlbihRSU9EZXZpY2U6OldyaXRlT25seSkpCisgICAg ICAgIHsKKyAgICAgICAgICAgIHFEZWJ1ZygpIDw8ICJFcnJvciBvcGVuaW5n IGZpbGU6ICIgPDwgZG93bmxvYWRlZEZpbGVOYW1lOworICAgICAgICAgICAg ZG93bmxvYWRlZEZpbGVOYW1lLmNsZWFyKCk7CisgICAgICAgICAgICBkZWZh dWx0RmlsZU5hbWUuY2xlYXIoKTsKKyAgICAgICAgICAgIGRvd25sb2FkU3Rh cnRlZCA9IDA7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwor ICAgICAgICAvLyBTdGFydCBkb3duYWxvZGluZyBwcm9ncmVzcyBiYXIKKyAg ICAgICAgcHJvZ3Jlc3NEbGcgPSBuZXcgUVByb2dyZXNzRGlhbG9nICh0cigi RG93bmxvYWRpbmcgZmlsZS4uLiUxICIpLmFyZyhkZWZhdWx0RmlsZU5hbWUp LCAiQ2FuY2VsIiwgcmVhZERhdGEsIHRvdGFsRGF0YSwgdGhpcyk7CisgICAg ICAgIHByb2dyZXNzRGxnLT5zZXRXaW5kb3dUaXRsZSgiRG93bmxvYWQgcHJv Z3Jlc3MuLiIpOworICAgICAgICBwcm9ncmVzc0RsZy0+c2V0TWluaW11bVdp ZHRoKDQ1MCk7CisgICAgICAgIHByb2dyZXNzRGxnLT5zZXRNaW5pbXVtSGVp Z2h0KDgwKTsKKyAgICAgICAgcHJvZ3Jlc3NEbGctPnNldFdpbmRvd0ZsYWdz KFF0OjpXaW5kb3cgfCBRdDo6Q3VzdG9taXplV2luZG93SGludCB8IFF0OjpX aW5kb3dNaW5pbWl6ZUJ1dHRvbkhpbnQgfCBRdDo6V2luZG93Q2xvc2VCdXR0 b25IaW50KTsKKyAgICAgICAgUU9iamVjdDo6Y29ubmVjdChwcm9ncmVzc0Rs ZywgU0lHTkFMKGNhbmNlbGVkKCkpLCB0aGlzLCBTTE9UKHByb2dyZXNzQ2Fu Y2VsZWQoKSkpOworICAgICAgICBwcm9ncmVzc0RsZy0+c2hvdygpOworICAg IH0KKworICAgIGlmIChtX2ZpbGUpCisgICAgeworICAgICAgICAvLyBXcml0 ZSB0aGUgZGF0YSB0byBmaWxlCisgICAgICAgIG1fZmlsZS0+d3JpdGUocmVw bHktPnJlYWQocmVhZERhdGEpKTsKKyAgICAgICAgcHJvZ3Jlc3NEbGctPnNl dFZhbHVlKHJlYWREYXRhKTsKKyAgICAgICAgLy8gQXMgcmVhZCBkYXRhIGFu ZCB0b3RhbERhdGEgZGlmZmVyZW5jZSBpcyB6ZXJvIG1lYW5zIGRvd25sb2Fk aW5nIGlzIGZpbmlzaGVkCisgICAgICAgIGlmICgodG90YWxEYXRhIC0gcmVh ZERhdGEpID09IDApCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChwcm9n cmVzc0RsZykKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBkZWxl dGUgcHJvZ3Jlc3NEbGc7CisgICAgICAgICAgICAgICAgcHJvZ3Jlc3NEbGcg PSBOVUxMOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBEb3du bG9hZGluZyBjb21wbHRlZCBzbyB3ZSBuZWVkIHRvIGRpc3BsYXkgdGhlIG1l c3NhZ2UKKyAgICAgICAgICAgIC8vIEluZm9ybSB1c2VyIHRoYXQgZG93bmxv YWRpbmcgaXMgY29tcGxldGVkCisgICAgICAgICAgICBRTWVzc2FnZUJveDo6 aW5mb3JtYXRpb24odGhpcywgdHIoIkRvd25sb2FkIGNvbXBsZXRlZCIpLCB0 cigiJTEgZmlsZSBkb3dubG9hZGVkIHN1Y2Nlc3NmdWxseSIpLmFyZyhkZWZh dWx0RmlsZU5hbWUpKTsKKyAgICAgICAgICAgIGRvd25sb2FkZWRGaWxlTmFt ZS5jbGVhcigpOworICAgICAgICAgICAgZGVmYXVsdEZpbGVOYW1lLmNsZWFy KCk7CisgICAgICAgICAgICBkb3dubG9hZFN0YXJ0ZWQgPSAwOworICAgICAg ICAgICAgaXNfZG93bmxvYWRfY2FuY2VsZWQgPSAwOworICAgICAgICAgICAg aWYgKG1fZmlsZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBk ZWxldGUgbV9maWxlOworICAgICAgICAgICAgICAgIG1fZmlsZSA9IE5VTEw7 CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8vVGhp cyBzbG90IHdpbGwgY2FsbGVkIHdoZW4gdXNlciBjYW5jZWwgdGhlIGRvd25s b2FkaW5nIGZpbGUgd2hpY2ggaXMgaW4gcHJvZ3Jlc3MuCit2b2lkIEJyb3dz ZXJXaW5kb3c6OnByb2dyZXNzQ2FuY2VsZWQoKQoreworICAgIGlzX2Rvd25s b2FkX2NhbmNlbGVkID0gMTsKKworICAgIGlmIChwcm9ncmVzc0RsZykKKyAg ICB7CisgICAgICAgIGRlbGV0ZSBwcm9ncmVzc0RsZzsKKyAgICAgICAgcHJv Z3Jlc3NEbGcgPSBOVUxMOworICAgIH0KKworICAgIGlmIChtX2ZpbGUpCisg ICAgeworICAgICAgICBkZWxldGUgbV9maWxlOworICAgICAgICBtX2ZpbGUg PSBOVUxMOworICAgIH0KKworICAgIGRvd25sb2FkZWRGaWxlTmFtZS5jbGVh cigpOworICAgIGRlZmF1bHRGaWxlTmFtZS5jbGVhcigpOworICAgIGRvd25s b2FkU3RhcnRlZCA9IDA7Cit9CisKKy8vIFRoaXMgc2xvdCB3aWxsIGNhbGxl ZCB3aGVuIGZpbGUgZG93bmxvYWRpbmcgaXMgZmluaXNoZWQKK3ZvaWQgQnJv d3NlcldpbmRvdzo6ZG93bmxvYWRGaW5pc2hlZCgpCit7CisgICAgaWYgKHBy b2dyZXNzRGxnKQorICAgIHsKKyAgICAgICAgZGVsZXRlIHByb2dyZXNzRGxn OworICAgICAgICBwcm9ncmVzc0RsZyA9IE5VTEw7CisgICAgfQorCisgICAg Ly8gSW5mb3JtIHVzZXIgdGhhdCBkb3dubG9hZGluZyBpcyBjb21wbGV0ZWQK KyAgICBpZiAoZG93bmxvYWRTdGFydGVkKQorICAgICAgICBRTWVzc2FnZUJv eDo6aW5mb3JtYXRpb24odGhpcywgdHIoIkRvd25sb2FkIGNvbXBsZXRlZCIp LCB0cigiJTEgZmlsZSBkb3dubG9hZGVkIHN1Y2Nlc3NmdWxseSIpLmFyZyhk ZWZhdWx0RmlsZU5hbWUpKTsKKworICAgIGRvd25sb2FkZWRGaWxlTmFtZS5j bGVhcigpOworICAgIGRlZmF1bHRGaWxlTmFtZS5jbGVhcigpOworICAgIGRv d25sb2FkU3RhcnRlZCA9IDA7CisgICAgaXNfZG93bmxvYWRfY2FuY2VsZWQg PSAwOworICAgIGlmIChtX2ZpbGUpCisgICAgeworICAgICAgICBkZWxldGUg bV9maWxlOworICAgICAgICBtX2ZpbGUgPSBOVUxMOworICAgIH0KK30KKwor Ly8gVGhpcyBzbG90IHdpbGwgYmUgY2FsbGVkIHdoZW4gdXNlciBkaXJlY3Rs eSBjbGljayBvbiBhbnkgZG93bmxvYWQgZmlsZQordm9pZCBCcm93c2VyV2lu ZG93Ojp1bnN1cHBvcnRlZENvbnRlbnQoUU5ldHdvcmtSZXBseSAqIHJlcGx5 KQoreworICAgIGlmIChkb3dubG9hZFN0YXJ0ZWQpCisgICAgeworICAgICAg ICAvL0luZm9ybSB0aGUgdXNlciB0aGF0IG9uZSBkb3dubG9hZCBhbHJlYWR5 IHN0YXJ0ZWQKKyAgICAgICAgUU1lc3NhZ2VCb3g6OmluZm9ybWF0aW9uKHRo aXMsIHRyKCJEb3dubG9hZCB3YXJuaW5nIiksIHRyKCJGaWxlIGRvd25sb2Fk IGFscmVhZHkgaW4gcHJvZ3Jlc3MgLSAlMSIpLmFyZyhkZWZhdWx0RmlsZU5h bWUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGRlZmF1bHRG aWxlTmFtZSA9IFFGaWxlSW5mbyhyZXBseS0+dXJsKCkudG9TdHJpbmcoKSku ZmlsZU5hbWUoKTsKKyAgICBRU3RyaW5nIGZpbGVOYW1lID0gUUZpbGVEaWFs b2c6OmdldFNhdmVGaWxlTmFtZSh0aGlzLCB0cigiU2F2ZSBGaWxlIiksIGRl ZmF1bHRGaWxlTmFtZSk7CisgICAgaWYgKGZpbGVOYW1lLmlzRW1wdHkoKSkK KyAgICAgICAgcmV0dXJuOworICAgIGVsc2UKKyAgICB7CisgICAgICAgIGRv d25sb2FkZWRGaWxlTmFtZSA9IGZpbGVOYW1lOworICAgICAgICBpZiAocmVw bHkgIT0gTlVMTCkKKyAgICAgICAgeworICAgICAgICAgICAgZG93bmxvYWRT dGFydGVkID0gMTsKKyAgICAgICAgICAgIGlzX2Rvd25sb2FkX2NhbmNlbGVk ID0gMDsKKyAgICAgICAgICAgIGNvbm5lY3QoIHJlcGx5LCBTSUdOQUwoZG93 bmxvYWRQcm9ncmVzcyhxaW50NjQsIHFpbnQ2NCkpLCB0aGlzLCBTTE9UKGRv d25sb2FkRmlsZVByb2dyZXNzKHFpbnQ2NCwgcWludDY0KSkpOworICAgICAg ICAgICAgY29ubmVjdCggcmVwbHksIFNJR05BTChmaW5pc2hlZCgpKSwgdGhp cywgU0xPVChkb3dubG9hZEZpbmlzaGVkKCkpKTsKKyAgICAgICAgfQorICAg IH0KK30KKwogLy8gU2xvdDogV2hlbiB0aGUgdGFiIGluZGV4IGNoYW5nZSwg aGlkZS9zaG93IHRoZSB0b29sYnV0dG9uIGRpc3BsYXllZCBvbiB0YWIKIHZv aWQgQnJvd3NlcldpbmRvdzo6dGFiSW5kZXhDaGFuZ2VkKGludCBpbmRleCkK IHsKQEAgLTM0Myw2ICs1MzgsNDAgQEAgdm9pZCBCcm93c2VyV2luZG93Ojp0 YWJUaXRsZUNoYW5nZWQoY29uc3QgUVN0cmluZyAmc3RyKQogLy8gU2xvdDog TGluayBpcyBvcGVuIGZyb20gcGdBZG1pbiBtYWlud2luZG93CiB2b2lkIEJy b3dzZXJXaW5kb3c6OnVybExpbmtDbGlja2VkKGNvbnN0IFFVcmwgJm5hbWUp CiB7CisgICAgUVN0cmluZyBjc3ZfZGF0YSA9IFFTdHJpbmc6OmZyb21VdGY4 KG5hbWUudG9FbmNvZGVkKCkpOworCisgICAgLy8gRmluZCB0aGUgImRhdGE6 dGV4dC9jc3YiIHRhZywgZ2V0IHRoZSBkZWNvZGVkIGRhdGEgZnJvbSBRVXJs IGNsYXNzIGFuZCB3cml0ZSB0byBjc3YgZmlsZS4KKyAgICBpZiAoY3N2X2Rh dGEuY29udGFpbnMoUVJlZ0V4cCgiXmRhdGE6dGV4dFwvY3N2IikpKQorICAg IHsKKyAgICAgICAgLy8gQXNrIHVzZXIgd2hlcmUgdG8gc2F2ZSB0aGUgY3N2 IGZpbGUgaW4gZmlsZXN5c3RlbS4KKyAgICAgICAgUVN0cmluZyBmaWxlbmFt ZSA9IFFGaWxlRGlhbG9nOjpnZXRTYXZlRmlsZU5hbWUodGhpcywgdHIoIlNh dmUgY3N2IGZpbGUiKSwgUURpcjo6Y3VycmVudFBhdGgoKSwgdHIoIkZpbGVz ICgqLmNzdikiKSApOworICAgICAgICBpZighZmlsZW5hbWUuaXNFbXB0eSgp KQorICAgICAgICB7CisgICAgICAgICAgICAvLyBEZWNvZGUgdGhlIGVuY29k ZWQgdXJpIGRhdGEKKyAgICAgICAgICAgIFFTdHJpbmcgY3N2RGF0YSA9IFFV cmw6OmZyb21QZXJjZW50RW5jb2RpbmcobmFtZS50b0VuY29kZWQoKSk7Cisg ICAgICAgICAgICBRU3RyaW5nTGlzdCBjc3ZTdHJMaXN0ID0gY3N2RGF0YS5z cGxpdCgiOyIpOworICAgICAgICAgICAgUVN0cmluZyBleHRyYWN0U3RyaW5n ID0gIiI7CisgICAgICAgICAgICBpZiAoY3N2U3RyTGlzdC5zaXplKCkgPj0g MykKKyAgICAgICAgICAgICAgICBleHRyYWN0U3RyaW5nID0gY3N2U3RyTGlz dC5hdCgyKTsKKyAgICAgICAgICAgIFFGaWxlIGNzdmZpbGUoZmlsZW5hbWUp OworICAgICAgICAgICAgaWYgKCFjc3ZmaWxlLm9wZW4oUUlPRGV2aWNlOjpX cml0ZU9ubHkgfCBRSU9EZXZpY2U6OlRleHQpKQorICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgIFFNZXNzYWdlQm94OjppbmZvcm1hdGlvbih0aGlz LCB0cigiU2F2ZSBjc3YgZmlsZSIpLCB0cigiRXJyb3Igd2hpbGUgb3Blbmlu ZyBmaWxlICUxIikuYXJnKGZpbGVuYW1lKSk7CisgICAgICAgICAgICAgICAg cmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLy8gV3JpdGUg dGhlIGNzdiBkYXRhIHRvIGZpbGUKKwkgICAgcWludDY0IGRhdGFfcmV0dXJu ID0gY3N2ZmlsZS53cml0ZShleHRyYWN0U3RyaW5nLnRvVXRmOCgpLmNvbnN0 RGF0YSgpKTsKKyAgICAgICAgICAgIGlmIChkYXRhX3JldHVybiA9PSAtMSkK KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBRTWVzc2FnZUJveDo6 aW5mb3JtYXRpb24odGhpcywgdHIoIlNhdmUgY3N2IGZpbGUiKSwgdHIoIkVy cm9yIHdoaWxlIHdyaXRpbmcgZGF0YSB0byBmaWxlICUxIikuYXJnKGZpbGVu YW1lKSk7CisgICAgICAgICAgICAgICAgY3N2ZmlsZS5jbG9zZSgpOworICAg ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGNzdmZpbGUuY2xvc2UoKTsKKyAgICAgICAgfQorICAgICAgICByZXR1 cm47CisgICAgfQorCiAgICAgLy8gRmlyc3QgY2hlY2sgaXMgdGhlcmUgYW55 IHRhYiBvcGVuZWQgd2l0aCBzYW1lIFVSTCB0aGVuIG9wZW4gaXQgYWdhaW4u CiAgICAgaW50IHRhYkZvdW5kID0gZmluZFVSTFRhYihuYW1lKTsKIApAQCAt MzUzLDYgKzU4MiwxMSBAQCB2b2lkIEJyb3dzZXJXaW5kb3c6OnVybExpbmtD bGlja2VkKGNvbnN0IFFVcmwgJm5hbWUpCiAgICAgICAgIG1fYWRkTmV3R3Jp ZExheW91dC0+c2V0Q29udGVudHNNYXJnaW5zKDAsIDAsIDAsIDApOwogICAg ICAgICBtX2FkZE5ld1dlYlZpZXcgPSBuZXcgV2ViVmlld1dpbmRvdyhtX2Fk ZE5ld1RhYik7CiAKKwkvLyBMaXN0ZW4gZm9yIHRoZSBkb3dubG9hZCByZXF1 ZXN0IGZyb20gdGhlIHdlYiBwYWdlCisJbV9hZGROZXdXZWJWaWV3LT5wYWdl KCktPnNldEZvcndhcmRVbnN1cHBvcnRlZENvbnRlbnQodHJ1ZSk7CisgICAg ICAgIGNvbm5lY3QobV9hZGROZXdXZWJWaWV3LT5wYWdlKCksIFNJR05BTChk b3dubG9hZFJlcXVlc3RlZChjb25zdCBRTmV0d29ya1JlcXVlc3QgJikpLCB0 aGlzLCBTTE9UKGRvd25sb2FkKGNvbnN0IFFOZXR3b3JrUmVxdWVzdCAmKSkp OworICAgICAgICBjb25uZWN0KG1fYWRkTmV3V2ViVmlldy0+cGFnZSgpLCBT SUdOQUwodW5zdXBwb3J0ZWRDb250ZW50KFFOZXR3b3JrUmVwbHkqKSksIHRo aXMsIFNMT1QodW5zdXBwb3J0ZWRDb250ZW50KFFOZXR3b3JrUmVwbHkqKSkp OworCiAgICAgICAgIG1fd2lkZ2V0ID0gbmV3IFFXaWRnZXQobV9hZGROZXdU YWIpOwogICAgICAgICBtX3Rvb2xCdG5CYWNrID0gbmV3IFFUb29sQnV0dG9u KG1fd2lkZ2V0KTsKICAgICAgICAgbV90b29sQnRuQmFjay0+c2V0Rml4ZWRI ZWlnaHQoUEdBX0JUTl9TSVpFKTsKZGlmZiAtLWdpdCBhL3J1bnRpbWUvQnJv d3NlcldpbmRvdy5oIGIvcnVudGltZS9Ccm93c2VyV2luZG93LmgKaW5kZXgg NDNmOTBmZS4uZDBlNDE1MCAxMDA2NDQKLS0tIGEvcnVudGltZS9Ccm93c2Vy V2luZG93LmgKKysrIGIvcnVudGltZS9Ccm93c2VyV2luZG93LmgKQEAgLTU0 LDYgKzU0LDExIEBAIHB1YmxpYyBzbG90czoKICAgICB2b2lkIHRhYkluZGV4 Q2hhbmdlZChpbnQgaW5kZXgpOwogICAgIHZvaWQgZ29CYWNrUGFnZSgpOwog ICAgIHZvaWQgZ29Gb3J3YXJkUGFnZSgpOworICAgIHZvaWQgZG93bmxvYWQo Y29uc3QgUU5ldHdvcmtSZXF1ZXN0ICZyZXF1ZXN0KTsKKyAgICB2b2lkIHVu c3VwcG9ydGVkQ29udGVudChRTmV0d29ya1JlcGx5ICogcmVwbHkpOworICAg IHZvaWQgZG93bmxvYWRGaW5pc2hlZCgpOworICAgIHZvaWQgZG93bmxvYWRG aWxlUHJvZ3Jlc3MocWludDY0ICwgcWludDY0ICk7CisgICAgdm9pZCBwcm9n cmVzc0NhbmNlbGVkKCk7CiAKIHByaXZhdGU6CiAgICAgUVN0cmluZyBtX2Fw cFNlcnZlclVybDsKQEAgLTc5LDYgKzg0LDEyIEBAIHByaXZhdGU6CiAKICAg ICBib29sIG1faW5pdGlhbExvYWQ7CiAgICAgaW50IG1fbG9hZEF0dGVtcHQ7 CisgICAgUVN0cmluZyBkb3dubG9hZGVkRmlsZU5hbWU7CisgICAgaW50IGRv d25sb2FkU3RhcnRlZDsKKyAgICBpbnQgaXNfZG93bmxvYWRfY2FuY2VsZWQ7 CisgICAgUUZpbGUgKm1fZmlsZTsKKyAgICBRUHJvZ3Jlc3NEaWFsb2cgKnBy b2dyZXNzRGxnOworICAgIFFTdHJpbmcgZGVmYXVsdEZpbGVOYW1lOwogCiAg ICAgdm9pZCBjcmVhdGVBY3Rpb25zKCk7CiAgICAgdm9pZCBwYXVzZShpbnQg c2Vjb25kcyA9IDEpOwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv c3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpz IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxl ZGl0b3IvanMvc3FsZWRpdG9yLmpzCmluZGV4IGMyMjgyYTEuLjUzNWI1NDMg MTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVkaXRvci90ZW1w bGF0ZXMvc3FsZWRpdG9yL2pzL3NxbGVkaXRvci5qcworKysgYi93ZWIvcGdh ZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVkaXRvci9qcy9z cWxlZGl0b3IuanMKQEAgLTI1NzEsNyArMjU3MSw3IEBAIGRlZmluZSgKICAg ICAgICAgICAgICAgICBrZXlzID0gXy5wbHVjayhzZWxmLmNvbHVtbnMsICdu YW1lJyk7CiAKICAgICAgICAgICAgIC8vIEZldGNoIHRoZSBpdGVtcyBmcm9t IGZ1bGxDb2xsZWN0aW9uIGFuZCBjb252ZXJ0IGl0IGFzIGNzdiBmb3JtYXQK LSAgICAgICAgICAgIHZhciBjc3YgPSBsYWJlbHMuam9pbignLCcpICsgJ1xu JzsKKyAgICAgICAgICAgIHZhciBjc3YgPSBrZXlzLmpvaW4oJywnKSArICdc bic7CiAgICAgICAgICAgICBjc3YgKz0gY29sbC5tYXAoZnVuY3Rpb24oaXRl bSkgewogICAgICAgICAgICAgICAgIHJldHVybiBfLm1hcChrZXlzLCBmdW5j dGlvbihrZXkpIHsKICAgICAgICAgICAgICAgICAgIHZhciBjZWxsID0gY3N2 X2NvbCBba2V5XS5jZWxsLApAQCAtMjU4NCw3ICsyNTg0LDcgQEAgZGVmaW5l KAogICAgICAgICAgICAgfSkuam9pbignXG4nKTsKIAogICAgICAgICAgICAg Ly8gRG93bmxvYWQgdGhlIGZpbGUuCi0gICAgICAgICAgICB2YXIgZW5jb2Rl ZFVyaSA9IGVuY29kZVVSSSgnZGF0YTp0ZXh0L2NzdjtjaGFyc2V0PXV0Zi04 LCcgKyBjc3YpLAorICAgICAgICAgICAgdmFyIGVuY29kZWRVcmkgPSBlbmNv ZGVVUkkoJ2RhdGE6dGV4dC9jc3Y7Y2hhcnNldD11dGYtODsnICsgY3N2KSwK ICAgICAgICAgICAgICAgICAgICAgbGluayA9IGRvY3VtZW50LmNyZWF0ZUVs ZW1lbnQoJ2EnKTsKICAgICAgICAgICAgIGxpbmsuc2V0QXR0cmlidXRlKCdo cmVmJywgZW5jb2RlZFVyaSk7CiAK --94eb2c07636868647e05367bb0d7 Content-Type: text/plain Content-Disposition: inline Content-Transfer-Encoding: 8bit MIME-Version: 1.0 -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers --94eb2c07636868647e05367bb0d7--