Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1d6bnm-0002Jw-LL for pgadmin-hackers@arkaria.postgresql.org; Fri, 05 May 2017 11:53:39 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1d6bnl-0000Qe-Tt for pgadmin-hackers@arkaria.postgresql.org; Fri, 05 May 2017 11:53:37 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1d6bnU-00083s-Nu for pgadmin-hackers@postgresql.org; Fri, 05 May 2017 11:53:20 +0000 Received: from mail-wr0-x231.google.com ([2a00:1450:400c:c0c::231]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.84_2) (envelope-from ) id 1d6bnP-0002cf-2N for pgadmin-hackers@postgresql.org; Fri, 05 May 2017 11:53:19 +0000 Received: by mail-wr0-x231.google.com with SMTP id l9so2441813wre.1 for ; Fri, 05 May 2017 04:53:14 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb-com.20150623.gappssmtp.com; s=20150623; h=mime-version:in-reply-to:references:from:date:message-id:subject:to :cc; bh=ydDljsc4P+k4m3gA2cZ9KK/Chtze9GwZfZRJ+9MRqbc=; b=MhpobGCN0cGQsOBzdvSWvZTbddE/ExpqjCUD/V87Ebp6LV73ndyQRp1reOt1VrAgXG 2M03TPuJRgwttS/DdMBrj8WumJVStLRLesAkr5x+kw5Img6TEtyo2gj0egpD0VR99a+k 3hKeCRLdlewv+JplPza8rI0Mmd+DjS3nQ4j7xAgAHDf1DHk6rEIuFMOu42pTF2agbYs7 BmD7ui5KOoYiWn6/L6uI9iy8qjObVkcNoBYz2EOS1KD6YD/A7C+HdCcpTYl0toZWETiL rwnKHkINXBVw0EfopPy8DJYMqVSkX5s1TgGBXYH3aFXBHbtiyGVW+YBMu58RDblksaPF Lqsw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=ydDljsc4P+k4m3gA2cZ9KK/Chtze9GwZfZRJ+9MRqbc=; b=Bg7e6YSmMWncqMkykSHQSRdi4IyhDl/0yRDw8MXsV/1MuwbgwxTYOf1fgyfbiCTFdN sYN9WZuRqpo2pssOmwhVKv7Fgh8NxTx8DbC6oRSYPgiyIrLaXiFDS3Ay+TWNAyTkC70X D0ATU9lbV0VVufGPMH8zhIdWIld2ldxPbM1eCLzl73o/x8gemkPnOxp9yPTdY/e702WP 67IVwnNYIGxXGSqPkraZi5dpIAeT8QVD3HxXNp9Jf6MQ83VujIm+MZcLcl+mx3iqo3of 59x88uC4Q1abfNuRMSwZckcVwh3eWzvXJLEJD5f1/TVc2UoUMt0v8lhIBiASvGxuojOr UiJg== X-Gm-Message-State: AN3rC/46kv1Bsau7KbBCL/n5jghndBle5BR3w6ftxurT7wENWJWsugQQ D30/V5CaNplV2ll0qhfMbx1iYDC64gTXY74= X-Received: by 10.223.134.46 with SMTP id 43mr35684017wrv.123.1493985193863; Fri, 05 May 2017 04:53:13 -0700 (PDT) MIME-Version: 1.0 Received: by 10.28.19.138 with HTTP; Fri, 5 May 2017 04:52:42 -0700 (PDT) In-Reply-To: References: From: Surinder Kumar Date: Fri, 5 May 2017 17:22:42 +0530 Message-ID: Subject: Re: [pgAdmin4][Patch][RM2257]: Query tool - Insert row doesn't use default values To: Dave Page Cc: pgadmin-hackers Content-Type: multipart/mixed; boundary=001a1146b7bcc85ff8054ec5881c X-Pg-Spam-Score: -1.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 --001a1146b7bcc85ff8054ec5881c Content-Type: multipart/alternative; boundary=001a1146b7bcc85ff5054ec5881a --001a1146b7bcc85ff5054ec5881a Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi Dave, The support to handle [null] and [default] values is added for following formatters: - JsonFormatter - NumbersFormatter - CheckmarkFormatter - TextFormatter Previously when a new row is added, it was not validating each and every cell for columns with attribute not_null =3D true. Introduced a new function validateRow(...) which is called on adding a new row, it validates each cell with column having attribute(not_null=3Dtrue). the corresponding cell will highlighted and save button will be disabled if value is [null]. Now I will add more feature test cases for remaining formatters. Will send separate patch for feature test cases once completed. Please review updated patch. On Tue, May 2, 2017 at 5:57 PM, Surinder Kumar < surinder.kumar@enterprisedb.com> wrote: > Hi Dave, > > On Tue, May 2, 2017 at 5:21 PM, Dave Page wrote: > >> Hi, >> >> This is looking much better now :-). Couple of thoughts and a bug: >> >> - Only the TextFormatter seems to handle both [null] and [default] >> values. Shouldn't all formatters do so (including Json and Checkmark)? >> > =E2=80=8BYes, I will apply the same changes for other formatters too.=E2= =80=8B > >> For example, "serial" columns currently get displayed as [null] when left >> blank, but I would expect to see [default]. >> >> - I would suggest we put [null] and [default] in a lighter colour - >> #999999. >> >> - With the feature test patch added, I seem to be consistently getting >> the following failure (immediately after your new tests run): >> >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> ERROR: runTest (pgadmin.feature_tests.xss_che >> cks_panels_and_query_tool_test.CheckForXssFeatureTest) >> Test XSS check for panels and query tool >> ---------------------------------------------------------------------- >> Traceback (most recent call last): >> File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feat= ure_test.py", >> line 42, in setUp >> self._screenshot() >> File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feat= ure_test.py", >> line 92, in _screenshot >> python_version)) >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 802, in >> get_screenshot_as_file >> png =3D self.get_screenshot_as_png() >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 821, in >> get_screenshot_as_png >> return base64.b64decode(self.get_screenshot_as_base64().encode(' >> ascii')) >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 831, in >> get_screenshot_as_base64 >> return self.execute(Command.SCREENSHOT)['value'] >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 238, in execute >> self.error_handler.check_response(response) >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/errorhandler.py", line 193, in >> check_response >> raise exception_class(message, screen, stacktrace) >> UnexpectedAlertPresentException: Alert Text: None >> Message: unexpected alert open: {Alert text : Are you sure you wish to >> close the pgAdmin 4 browser?} >> (Session info: chrome=3D58.0.3029.81) >> (Driver info: chromedriver=3D2.29.461585 (0be2cd95f834e9ee7c46bcc7cf40= 5b483f5ae83b),platform=3DMac >> OS X 10.12.3 x86_64) >> >> >> =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D >> ERROR: runTest (pgadmin.feature_tests.xss_che >> cks_pgadmin_debugger_test.CheckDebuggerForXssFeatureTest) >> Test table DDL generation >> ---------------------------------------------------------------------- >> Traceback (most recent call last): >> File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feat= ure_test.py", >> line 42, in setUp >> self._screenshot() >> File "/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_feat= ure_test.py", >> line 92, in _screenshot >> python_version)) >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 802, in >> get_screenshot_as_file >> png =3D self.get_screenshot_as_png() >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 821, in >> get_screenshot_as_png >> return base64.b64decode(self.get_screenshot_as_base64().encode(' >> ascii')) >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 831, in >> get_screenshot_as_base64 >> return self.execute(Command.SCREENSHOT)['value'] >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/webdriver.py", line 238, in execute >> self.error_handler.check_response(response) >> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >> ges/selenium/webdriver/remote/errorhandler.py", line 193, in >> check_response >> raise exception_class(message, screen, stacktrace) >> UnexpectedAlertPresentException: Alert Text: None >> Message: unexpected alert open: {Alert text : Are you sure you wish to >> close the pgAdmin 4 browser?} >> (Session info: chrome=3D58.0.3029.81) >> (Driver info: chromedriver=3D2.29.461585 (0be2cd95f834e9ee7c46bcc7cf40= 5b483f5ae83b),platform=3DMac >> OS X 10.12.3 x86_64) >> > =E2=80=8BSure. I will fix this.=E2=80=8B > >> >> Thanks! >> >> >> On Fri, Apr 28, 2017 at 10:19 AM, Surinder Kumar < >> surinder.kumar@enterprisedb.com> wrote: >> >>> Hi Dave, >>> >>> Please find updated patch for RM case and a separate patch for Feature >>> tests. >>> >>> *Python:* >>> >>> - Added [default] label for cells with default values while inserting a >>> new row. >>> >>> - Introduced a FieldValidator function for cells that don't allow null >>> values. If user tries to insert null value, field with be highlighted w= ith >>> red borders around. >>> >>> =E2=80=8B- >>> If a cell contains blank string('') and when we set it to null, the >>> change into the cell is not detected. It was because the comparison >>> for (defaultValue =3D=3D null) return true if defaultValue is undefined. >>> Hence _.isNull(value) is used to fix this. >>> >>> *Feature Test cases:* >>> >>> - Introduced a new method create_table_with_query(server, db_name, >>> query) in test_utils.py which executes the given query on connected >>> server. >>> >>> - Added a new file test_data.json that has test data for test cases. >>> >>> >>> On Fri, Apr 7, 2017 at 2:21 PM, Dave Page wrote: >>> >>>> Hi >>>> >>>> On Sat, Apr 1, 2017 at 12:45 PM, Surinder Kumar >>>> wrote: >>>> > Hi >>>> > >>>> > Issues fixed: >>>> > >>>> > 1. If a column is defined with a default modifier, there is now way = to >>>> > insert the row with those defaults. >>>> > The column will be left blank and it will take default value >>>> automatically. >>>> > >>>> > 2. If a column has a not-null constraint then an error is returned >>>> and the >>>> > row is not inserted. >>>> > The column will be left blank >>>> > >>>> > The default values for new added rows will be displayed on >>>> refresh/execute. >>>> > >>>> > Please find attached patch and review. >>>> >>>> This largely works as expected, but there is some weirdness. I have a >>>> test table that looks like this: >>>> >>>> CREATE TABLE public.defaults >>>> ( >>>> id bigint NOT NULL DEFAULT nextval('defaults_id_seq'::regclass), >>>> data_default_nulls text COLLATE pg_catalog."default" DEFAULT >>>> 'abc123'::text, >>>> data_default_no_nulls text COLLATE pg_catalog."default" NOT NULL >>>> DEFAULT 'def456'::text, >>>> data_nulls text COLLATE pg_catalog."default", >>>> data_no_nulls text COLLATE pg_catalog."default" NOT NULL, >>>> CONSTRAINT defaults_pkey PRIMARY KEY (id) >>>> ) >>>> >>>> Remember that the expected behaviour is: >>>> >>>> - Set a value to empty to update the column to null. >>>> - Set a value to '' to update the column to an empty string >>>> - Set a value to anything else to update the column to that value >>>> >>>> 1) In a row with values in each column, if I try to set the value of >>>> data_default_nulls to null, the query executed is: >>>> >>>> UPDATE public.defaults SET >>>> data_default_nulls =3D '' WHERE >>>> id =3D '2'; >>>> >>>> 2) If I do the same in the data_nulls column, the value is immediately >>>> shown as [null] and the query executed is: >>>> >>>> UPDATE public.defaults SET >>>> data_nulls =3D NULL WHERE >>>> id =3D '2'; >>>> >>>> 3) If I then edit the value in data_default_nulls, it shows the >>>> current value as ''. Removing the quotes (to set it to null) doesn't >>>> get detected as a change. >>>> >>> =E2=80=8B=E2=80=8BTaken care. >>> >>>> >>>> 4) When I manually executed "update defaults set data_default_nulls =3D >>>> null where id =3D 2" in a query tool window, I got: >>>> >>>> 2017-04-07 09:43:02,987: INFO werkzeug: 127.0.0.1 - - [07/Apr/2017 >>>> 09:43:02] "GET /sqleditor/columns/8745675 HTTP/1.1" 500 - >>>> Traceback (most recent call last): >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 2000, in __call__ >>>> return self.wsgi_app(environ, start_response) >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 1991, in wsgi_app >>>> response =3D self.make_response(self.handle_exception(e)) >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 1567, in handle_exception >>>> reraise(exc_type, exc_value, tb) >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 1988, in wsgi_app >>>> response =3D self.full_dispatch_request() >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 1641, in full_dispatch_request >>>> rv =3D self.handle_user_exception(e) >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 1544, in handle_user_exception >>>> reraise(exc_type, exc_value, tb) >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 1639, in full_dispatch_request >>>> rv =3D self.dispatch_request() >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask/app.py", >>>> line 1625, in dispatch_request >>>> return self.view_functions[rule.endpoint](**req.view_args) >>>> File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa >>>> ges/flask_login.py", >>>> line 792, in decorated_view >>>> return func(*args, **kwargs) >>>> File "/Users/dpage/git/pgadmin4/web/pgadmin/tools/sqleditor/__ini >>>> t__.py", >>>> line 452, in get_columns >>>> tid=3Dcommand_obj.obj_id) >>>> AttributeError: 'QueryToolCommand' object has no attribute 'obj_id' >>>> >>> =E2=80=8BFixed.=E2=80=8B >>> >>>> >>>> 5) When I run the query again in pgAdmin III, then refresh the data in >>>> pgAdmin 4, the data_default_nulls column is displayed without the >>>> [null] marker (despite having a null value, which I confirmed in >>>> pgAdmin 3). >>>> >>> =E2=80=8BFixed.=E2=80=8B >>> >>>> >>>> I'm sure there are other combinations of issues here. Please fix and >>>> thoroughly re-test to ensure behaviour is consistent - and to avoid >>>> future issues, please add some appropriate feature tests to check >>>> nulls, defaults and empty strings are properly handled in view, insert >>>> and updates. Murtuza recently wrote some feature tests for the query >>>> tool - you should be able to use those as a starting point. >>>> >>> =E2=80=8BAdded feature tests=E2=80=8B >>> >>>> >>>> Thanks. >>>> >>>> -- >>>> Dave Page >>>> Blog: http://pgsnake.blogspot.com >>>> Twitter: @pgsnake >>>> >>>> EnterpriseDB UK: http://www.enterprisedb.com >>>> The Enterprise PostgreSQL Company >>>> >>> >>> >> >> >> -- >> Dave Page >> Blog: http://pgsnake.blogspot.com >> Twitter: @pgsnake >> >> EnterpriseDB UK: http://www.enterprisedb.com >> The Enterprise PostgreSQL Company >> > > --001a1146b7bcc85ff5054ec5881a Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi = Dave,

The support to hand= le [null] and [default] values is added for following formatters:
=C2=A0-=C2=A0JsonFormatt= er
=C2=A0-=C2= =A0NumbersFormatter
=C2=A0-=C2=A0CheckmarkFormatter
=C2=A0-=C2=A0TextFormatter

Previously when a new row is added, it was not vali= dating each and every cell for columns with attribute not_null =3D true.
Introduced a new function=C2=A0validateRow(...)=C2= =A0which is called on adding a new row, it validates each cell with = column having attribute(not_null=3Dtrue). the corresponding cell will highl= ighted and save button will be disabled if value is [null].

Now I will add mo= re feature test cases for remaining formatters. Will send separate patch fo= r feature test cases once completed.

=
Please review updated patch.


On Tue, May 2, 2017 at 5:57= PM, Surinder Kumar <surinder.kumar@enterprisedb.com>= wrote:
Hi Dave,

On Tue, May 2, = 2017 at 5:21 PM, Dave Page <dpage@pgadmin.org> wrote:
Hi,

This is= looking much better now :-). Couple of thoughts and a bug:

<= /div>
- Only the TextFormatter seems to handle both [null] and [default= ] values. Shouldn't all formatters do so (including Json and Checkmark)= ?
=E2=80=8BYes, I will apply the same changes for other formatte= rs too.=E2=80=8B
For example, "serial" columns currently g= et displayed as [null] when left blank, but I would expect to see [default]= .=C2=A0

- I would suggest we put [null] and [defau= lt] in a lighter colour - #999999.

- With the feat= ure test patch added, I seem to be consistently getting the following failu= re (immediately after your new tests run):

= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D
ERROR: runTest (pgadmin.feature_tests.xss_checks_panels_and_que= ry_tool_test.CheckForXssFeatureTest)
Test XSS check for pane= ls and query tool
------------------------------------------= ----------------------------
Traceback (most recent ca= ll last):
=C2=A0 File "/Users/dpage/git/pgadmin4/web<= wbr>/regression/feature_utils/base_feature_test.py", line 42, in = setUp
=C2=A0 =C2=A0 self._screenshot()
=C2=A0 File &quo= t;/Users/dpage/git/pgadmin4/web/regression/feature_utils/base_fea= ture_test.py", line 92, in _screenshot
=C2=A0 =C2=A0 python_= version))
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmi= n4/lib/python2.7/site-packages/selenium/webdriver/remote/webdrive= r.py", line 802, in get_screenshot_as_file
=C2=A0 =C2=A0 png= =3D self.get_screenshot_as_png()
=C2=A0 File "/Users/dpage/= .virtualenvs/pgadmin4/lib/python2.7/site-packages/selenium/webdri= ver/remote/webdriver.py", line 821, in get_screenshot_as_png
=C2=A0 =C2=A0 return base64.b64decode(self.get_screenshot_as_bas= e64().encode('ascii'))
=C2=A0 File "/Users/dpag= e/.virtualenvs/pgadmin4/lib/python2.7/site-packages/selenium/webd= river/remote/webdriver.py", line 831, in get_screenshot_as_base64=
=C2=A0 =C2=A0 return self.execute(Command.SCREENSHOT)['= value']
=C2=A0 File "/Users/dpage/.virtualenvs/pgad= min4/lib/python2.7/site-packages/selenium/webdriver/remote/webdri= ver.py", line 238, in execute
=C2=A0 =C2=A0 self.error_handl= er.check_response(response)
=C2=A0 File "/Users/dpage/.= virtualenvs/pgadmin4/lib/python2.7/site-packages/selenium/webdriv= er/remote/errorhandler.py", line 193, in check_response
=C2=A0 =C2=A0 raise exception_class(message, screen, stacktrace)
UnexpectedAlertPresentException: Alert Text: None
Message: = unexpected alert open: {Alert text : Are you sure you wish to close the pgA= dmin 4 browser?}
=C2=A0 (Session info: chrome=3D58.0.3029.81)
=C2=A0 (Driver info: chromedriver=3D2.29.461585 (0be2cd95f834e9ee7c4= 6bcc7cf405b483f5ae83b),platform=3DMac OS X 10.12.3 x86_64)
<= br>

=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D
ERROR: runTest (pgadmin.feature_tests= .xss_checks_pgadmin_debugger_test.CheckDebuggerForXssFeatureTest)=
Test table DDL generation
----------------------------= ------------------------------------------
Traceb= ack (most recent call last):
=C2=A0 File "/Users/dpag= e/git/pgadmin4/web/regression/feature_utils/base_feature_test.py&= quot;, line 42, in setUp
=C2=A0 =C2=A0 self._screenshot()
=C2=A0 File "/Users/dpage/git/pgadmin4/web/regression/feature_= utils/base_feature_test.py", line 92, in _screenshot
= =C2=A0 =C2=A0 python_version))
=C2=A0 File "/Users/dpage/.vi= rtualenvs/pgadmin4/lib/python2.7/site-packages/selenium/webdriver= /remote/webdriver.py", line 802, in get_screenshot_as_file
<= div>=C2=A0 =C2=A0 png =3D self.get_screenshot_as_png()
=C2=A0 Fil= e "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 821, in get_s= creenshot_as_png
=C2=A0 =C2=A0 return base64.b64decode(self.get_s= creenshot_as_base64().encode('ascii'))
=C2=A0 F= ile "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packa<= wbr>ges/selenium/webdriver/remote/webdriver.py", line 831, in get= _screenshot_as_base64
=C2=A0 =C2=A0 return self.execute(Command.S= CREENSHOT)['value']
=C2=A0 File "/Users/dpage/.= virtualenvs/pgadmin4/lib/python2.7/site-packages/selenium/webdriv= er/remote/webdriver.py", line 238, in execute
=C2=A0 = =C2=A0 self.error_handler.check_response(response)
=C2=A0 Fi= le "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 193, in c= heck_response
=C2=A0 =C2=A0 raise exception_class(message, screen= , stacktrace)
UnexpectedAlertPresentException: Alert Text: N= one
Message: unexpected alert open: {Alert text : Are you sure yo= u wish to close the pgAdmin 4 browser?}
=C2=A0 (Session info: chr= ome=3D58.0.3029.81)
=C2=A0 (Driver info: chromedriver=3D2.29.4615= 85 (0be2cd95f834e9ee7c46bcc7cf405b483f5ae83b),platform=3DMac OS X 10.1= 2.3 x86_64)
=E2=80=8BSure. I will fix this.=E2=80=8B<= /div>

Thanks!


On Fri, Apr 28, 2017 at 10:19 AM, Surinder Kumar <surinder.= kumar@enterprisedb.com> wrote:
Hi Dave,

Please find updated patch for RM case and a separate patch for = Feature tests.

Python:

- Added=C2=A0[default] label for cells with default values while inserting a new row.=

- Introduced a FieldValidator function for cells that don't a= llow null values. If user tries to insert null value, field with be highlig= hted with red =C2=A0 =C2=A0borders around.

=E2=80=8B-=C2= =A0
If a cell contains blank string('') and when we set it to = null, the change into the cell is not detected. It was because the comparis= on
for (defaultValue =3D=3D null) return true if defaultValue is undefin= ed. Hence _.isNull(value) is used to fix this.

Feature Test cases= :

=C2=A0- Introduced a new= method=C2=A0create_table_with_query(server, db_name, query)<= /font>=C2=A0 in test_utils.py which executes the given query on connected s= erver.

=C2=A0- Added a new file test_data.json tha= t has test data for test cases.


On Fri, Apr 7, 2017 at 2:21 PM, Dave Page <= dpage@pgadmin.org> wrote:
Hi

On Sat, Apr 1, 2017 at 12:45 PM, Surinder Kumar
<su= rinder.kumar@enterprisedb.com> wrote:
> Hi
>
> Issues fixed:
>
> 1. If a column is defined with a default modifier, there is now way to=
> insert the row with those defaults.
> The column will be left blank and it will take default value automatic= ally.
>
> 2. If a column has a not-null constraint then an error is returned and= the
> row is not inserted.
> The column will be left blank
>
> The default values for new added rows will be displayed on refresh/exe= cute.
>
> Please find attached patch and review.

This largely works as expected, but there is some weirdness. I have = a
test table that looks like this:

CREATE TABLE public.defaults
(
=C2=A0 =C2=A0 id bigint NOT NULL DEFAULT nextval('defaults_id_seq':= :regclass),
=C2=A0 =C2=A0 data_default_nulls text COLLATE pg_catalog."default"= ; DEFAULT 'abc123'::text,
=C2=A0 =C2=A0 data_default_no_nulls text COLLATE pg_catalog."default&q= uot; NOT NULL
DEFAULT 'def456'::text,
=C2=A0 =C2=A0 data_nulls text COLLATE pg_catalog."default",
=C2=A0 =C2=A0 data_no_nulls text COLLATE pg_catalog."default" NOT= NULL,
=C2=A0 =C2=A0 CONSTRAINT defaults_pkey PRIMARY KEY (id)
)

Remember that the expected behaviour is:

- Set a value to empty to update the column to null.
- Set a value to '' to update the column to an empty string
- Set a value to anything else to update the column to that value

1) In a row with values in each column, if I try to set the value of
data_default_nulls to null, the query executed is:

UPDATE public.defaults SET
data_default_nulls =3D '' WHERE
id =3D '2';

2) If I do the same in the data_nulls column, the value is immediately
shown as [null] and the query executed is:

UPDATE public.defaults SET
data_nulls =3D NULL WHERE
id =3D '2';

3) If I then edit the value in data_default_nulls, it shows the
current value as ''. Removing the quotes (to set it to null) doesn&= #39;t
get detected as a change.
=E2=80=8B=E2=80=8BTaken care.=C2=A0

4) When I manually executed "update defaults set data_default_nulls = =3D
null where id =3D 2" in a query tool window, I got:

2017-04-07 09:43:02,987: INFO werkzeug: 127.0.0.1 - - [07/Apr/2017
09:43:02] "GET /sqleditor/columns/8745675 HTTP/1.1" 500 -
Traceback (most recent call last):
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 2000, in __call__
=C2=A0 =C2=A0 return self.wsgi_app(environ, start_response)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1991, in wsgi_app
=C2=A0 =C2=A0 response =3D self.make_response(self.handle_exception(e)= )
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1567, in handle_exception
=C2=A0 =C2=A0 reraise(exc_type, exc_value, tb)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1988, in wsgi_app
=C2=A0 =C2=A0 response =3D self.full_dispatch_request()
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1641, in full_dispatch_request
=C2=A0 =C2=A0 rv =3D self.handle_user_exception(e)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1544, in handle_user_exception
=C2=A0 =C2=A0 reraise(exc_type, exc_value, tb)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1639, in full_dispatch_request
=C2=A0 =C2=A0 rv =3D self.dispatch_request()
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask/app.py",
line 1625, in dispatch_request
=C2=A0 =C2=A0 return self.view_functions[rule.endpoint](**req.view_arg= s)
=C2=A0 File "/Users/dpage/.virtualenvs/pgadmin4/lib/python2.7/sit= e-packages/flask_login.py",
line 792, in decorated_view
=C2=A0 =C2=A0 return func(*args, **kwargs)
=C2=A0 File "/Users/dpage/git/pgadmin4/web/pgadmin/tools/sqledito= r/__init__.py",
line 452, in get_columns
=C2=A0 =C2=A0 tid=3Dcommand_obj.obj_id)
AttributeError: 'QueryToolCommand' object has no attribute 'obj= _id'
=E2=80= =8BFixed.=E2=80=8B

5) When I run the query again in pgAdmin III, then refresh the data in
pgAdmin 4, the data_default_nulls column is displayed without the
[null] marker (despite having a null value, which I confirmed in
pgAdmin 3).
=E2=80=8B= Fixed.=E2=80=8B

I'm sure there are other combinations of issues here. Please fix and
thoroughly re-test to ensure behaviour is consistent - and to avoid
future issues, please add some appropriate feature tests to check
nulls, defaults and empty strings are properly handled in view, insert
and updates. Murtuza recently wrote some feature tests for the query
tool - you should be able to use those as a starting point.
=E2=80=8BAdded feature tests=E2=80= =8B
<= blockquote class=3D"gmail_quote" style=3D"margin:0px 0px 0px 0.8ex;border-l= eft:1px solid rgb(204,204,204);padding-left:1ex">
Thanks.

--
Dave Page
Blog: http://pgsnake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.com
The Enterprise PostgreSQL Company




--
Dave PageBlog: http://pgs= nake.blogspot.com
Twitter: @pgsnake

EnterpriseDB UK: http://www.enterprisedb.= com
The Enterprise PostgreSQL Company


--001a1146b7bcc85ff5054ec5881a-- --001a1146b7bcc85ff8054ec5881c Content-Type: application/octet-stream; name="RM_2257_v2.patch" Content-Disposition: attachment; filename="RM_2257_v2.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_j2bs6ifz0 ZGlmZiAtLWdpdCBhL3dlYi9wZ2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vw cy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMv Y29sdW1uL3NxbC85LjJfcGx1cy9ub2Rlcy5zcWwgYi93ZWIvcGdhZG1pbi9i cm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVycy9kYXRhYmFzZXMvc2NoZW1h cy90YWJsZXMvdGVtcGxhdGVzL2NvbHVtbi9zcWwvOS4yX3BsdXMvbm9kZXMu c3FsCmluZGV4IDc1OWU2NTcuLmYzMzUzZDYgMTAwNjQ0Ci0tLSBhL3dlYi9w Z2FkbWluL2Jyb3dzZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNl cy9zY2hlbWFzL3RhYmxlcy90ZW1wbGF0ZXMvY29sdW1uL3NxbC85LjJfcGx1 cy9ub2Rlcy5zcWwKKysrIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJf Z3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBs YXRlcy9jb2x1bW4vc3FsLzkuMl9wbHVzL25vZGVzLnNxbApAQCAtMSw0ICsx LDUgQEAKLVNFTEVDVCBhdHQuYXR0bmFtZSBhcyBuYW1lLCBhdHQuYXR0bnVt IGFzIE9JRCwgZm9ybWF0X3R5cGUodHkub2lkLE5VTEwpIEFTIGRhdGF0eXBl CitTRUxFQ1QgYXR0LmF0dG5hbWUgYXMgbmFtZSwgYXR0LmF0dG51bSBhcyBP SUQsIGZvcm1hdF90eXBlKHR5Lm9pZCxOVUxMKSBBUyBkYXRhdHlwZSwKK2F0 dC5hdHRub3RudWxsIGFzIG5vdF9udWxsLCBhdHQuYXR0aGFzZGVmIGFzIGhh c19kZWZhdWx0X3ZhbAogRlJPTSBwZ19hdHRyaWJ1dGUgYXR0CiAgIEpPSU4g cGdfdHlwZSB0eSBPTiB0eS5vaWQ9YXR0dHlwaWQKICAgSk9JTiBwZ19uYW1l c3BhY2UgdG4gT04gdG4ub2lkPXR5LnR5cG5hbWVzcGFjZQpkaWZmIC0tZ2l0 IGEvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2ZXJfZ3JvdXBzL3NlcnZlcnMv ZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3RlbXBsYXRlcy9jb2x1bW4vc3Fs L2RlZmF1bHQvbm9kZXMuc3FsIGIvd2ViL3BnYWRtaW4vYnJvd3Nlci9zZXJ2 ZXJfZ3JvdXBzL3NlcnZlcnMvZGF0YWJhc2VzL3NjaGVtYXMvdGFibGVzL3Rl bXBsYXRlcy9jb2x1bW4vc3FsL2RlZmF1bHQvbm9kZXMuc3FsCmluZGV4IDc1 MzZhOWMuLjRmMWRlMmEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL2Jyb3dz ZXIvc2VydmVyX2dyb3Vwcy9zZXJ2ZXJzL2RhdGFiYXNlcy9zY2hlbWFzL3Rh Ymxlcy90ZW1wbGF0ZXMvY29sdW1uL3NxbC9kZWZhdWx0L25vZGVzLnNxbAor KysgYi93ZWIvcGdhZG1pbi9icm93c2VyL3NlcnZlcl9ncm91cHMvc2VydmVy cy9kYXRhYmFzZXMvc2NoZW1hcy90YWJsZXMvdGVtcGxhdGVzL2NvbHVtbi9z cWwvZGVmYXVsdC9ub2Rlcy5zcWwKQEAgLTEsNCArMSw1IEBACi1TRUxFQ1Qg YXR0LmF0dG5hbWUgYXMgbmFtZSwgYXR0LmF0dG51bSBhcyBPSUQsIGZvcm1h dF90eXBlKHR5Lm9pZCxOVUxMKSBBUyBkYXRhdHlwZQorU0VMRUNUIGF0dC5h dHRuYW1lIGFzIG5hbWUsIGF0dC5hdHRudW0gYXMgT0lELCBmb3JtYXRfdHlw ZSh0eS5vaWQsTlVMTCkgQVMgZGF0YXR5cGUsCithdHQuYXR0bm90bnVsbCBh cyBub3RfbnVsbCwgYXR0LmF0dGhhc2RlZiBhcyBoYXNfZGVmYXVsdF92YWwK IEZST00gcGdfYXR0cmlidXRlIGF0dAogICAgIEpPSU4gcGdfdHlwZSB0eSBP TiB0eS5vaWQ9YXR0dHlwaWQKICAgICBKT0lOIHBnX25hbWVzcGFjZSB0biBP TiB0bi5vaWQ9dHkudHlwbmFtZXNwYWNlCmRpZmYgLS1naXQgYS93ZWIvcGdh ZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL3NsaWNrLnBnYWRtaW4uZWRpdG9y cy5qcyBiL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvc2xpY2su cGdhZG1pbi5lZGl0b3JzLmpzCmluZGV4IGNkZmJhNGQuLjBiZGQxYWIgMTAw NjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3N0YXRpYy9qcy9zbGlja2dyaWQvc2xp Y2sucGdhZG1pbi5lZGl0b3JzLmpzCisrKyBiL3dlYi9wZ2FkbWluL3N0YXRp Yy9qcy9zbGlja2dyaWQvc2xpY2sucGdhZG1pbi5lZGl0b3JzLmpzCkBAIC0x MTAsNyArMTEwLDEyIEBACiAKICAgICAvLyBXaGVuIHRleHQgZWRpdG9yIG9w ZW5zCiAgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgewot ICAgICAgaWYgKGl0ZW1bYXJncy5jb2x1bW4ucG9zXSA9PT0gIiIpIHsKKyAg ICAgIHZhciBjb2wgPSBhcmdzLmNvbHVtbjsKKworICAgICAgaWYgKF8uaXNV bmRlZmluZWQoaXRlbVthcmdzLmNvbHVtbi5wb3NdKSAmJiBjb2wuaGFzX2Rl ZmF1bHRfdmFsKSB7CisgICAgICAgICRpbnB1dC52YWwoIiIpOworICAgICAg fQorICAgICAgZWxzZSBpZiAoaXRlbVthcmdzLmNvbHVtbi5wb3NdID09PSAi IikgewogICAgICAgICAkaW5wdXQudmFsKCInJyIpOwogICAgICAgfQogICAg ICAgZWxzZSB7CkBAIC0xNDUsNyArMTUwLDEwIEBACiAgICAgfTsKIAogICAg IHRoaXMuaXNWYWx1ZUNoYW5nZWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICBy ZXR1cm4gKCEoJGlucHV0LnZhbCgpID09ICIiICYmIGRlZmF1bHRWYWx1ZSA9 PSBudWxsKSkgJiYgKCRpbnB1dC52YWwoKSAhPSBkZWZhdWx0VmFsdWUpOwor ICAgICAgLy8gVXNlIF8uaXNOdWxsKHZhbHVlKSBmb3IgY29tcGFyaXNvbiBm b3IgbnVsbCBpbnN0ZWFkIG9mCisgICAgICAvLyBkZWZhdWx0VmFsdWUgPT0g bnVsbCwgYmVjYXVzZSBpdCByZXR1cm5zIHRydWUgZm9yIHVuZGVmaW5lZCB2 YWx1ZS4KKyAgICAgIHJldHVybiAoISgkaW5wdXQudmFsKCkgPT0gIiIgJiYg Xy5pc051bGwoZGVmYXVsdFZhbHVlKSkpICYmCisgICAgICAgICgkaW5wdXQu dmFsKCkgIT0gZGVmYXVsdFZhbHVlKTsKICAgICB9OwogCiAgICAgdGhpcy52 YWxpZGF0ZSA9IGZ1bmN0aW9uICgpIHsKQEAgLTI1Myw3ICsyNjEsNyBAQAog CiAgICAgdGhpcy5sb2FkVmFsdWUgPSBmdW5jdGlvbiAoaXRlbSkgewogICAg ICAgdmFyIGRhdGEgPSBkZWZhdWx0VmFsdWUgPSBpdGVtW2FyZ3MuY29sdW1u LnBvc107Ci0gICAgICBpZiAodHlwZW9mIGRhdGEgPT09ICJvYmplY3QiICYm ICFBcnJheS5pc0FycmF5KGRhdGEpKSB7CisgICAgICBpZiAoZGF0YSAmJiB0 eXBlb2YgZGF0YSA9PT0gIm9iamVjdCIgJiYgIUFycmF5LmlzQXJyYXkoZGF0 YSkpIHsKICAgICAgICAgZGF0YSA9IEpTT04uc3RyaW5naWZ5KGRhdGEpOwog ICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7CiAgICAg ICAgIHZhciB0ZW1wID0gW107CkBAIC0yODIsNyArMjkwLDcgQEAKICAgICB9 OwogCiAgICAgdGhpcy5pc1ZhbHVlQ2hhbmdlZCA9IGZ1bmN0aW9uICgpIHsK LSAgICAgIHJldHVybiAoISgkaW5wdXQudmFsKCkgPT0gIiIgJiYgZGVmYXVs dFZhbHVlID09IG51bGwpKSAmJiAoJGlucHV0LnZhbCgpICE9IGRlZmF1bHRW YWx1ZSk7CisgICAgICByZXR1cm4gKCEoJGlucHV0LnZhbCgpID09ICIiICYm IF8uaXNOdWxsKGRlZmF1bHRWYWx1ZSkpKSAmJiAoJGlucHV0LnZhbCgpICE9 IGRlZmF1bHRWYWx1ZSk7CiAgICAgfTsKIAogICAgIHRoaXMudmFsaWRhdGUg PSBmdW5jdGlvbiAoKSB7CkBAIC00OTgsNiArNTA2LDEyIEBACiAgICAgfTsK IAogICAgIHRoaXMudmFsaWRhdGUgPSBmdW5jdGlvbiAoKSB7CisgICAgICBp ZiAoYXJncy5jb2x1bW4udmFsaWRhdG9yKSB7CisgICAgICAgIHZhciB2YWxp ZGF0aW9uUmVzdWx0cyA9IGFyZ3MuY29sdW1uLnZhbGlkYXRvcih0aGlzLnNl cmlhbGl6ZVZhbHVlKCkpOworICAgICAgICBpZiAoIXZhbGlkYXRpb25SZXN1 bHRzLnZhbGlkKSB7CisgICAgICAgICAgcmV0dXJuIHZhbGlkYXRpb25SZXN1 bHRzOworICAgICAgICB9CisgICAgICB9CiAgICAgICByZXR1cm4gewogICAg ICAgICB2YWxpZDogdHJ1ZSwKICAgICAgICAgbXNnOiBudWxsCkBAIC04Mzcs NyArODUxLDEyIEBACiAgICAgfTsKIAogICAgIHRoaXMuaXNWYWx1ZUNoYW5n ZWQgPSBmdW5jdGlvbiAoKSB7Ci0gICAgICByZXR1cm4gKCEoJGlucHV0LnZh bCgpID09ICIiICYmIGRlZmF1bHRWYWx1ZSA9PSBudWxsKSkgJiYgKCRpbnB1 dC52YWwoKSAhPSBkZWZhdWx0VmFsdWUpOworICAgICAgaWYgKCRpbnB1dC52 YWwoKSA9PSAiIiAmJiBkZWZhdWx0VmFsdWUgPT0gIiIpIHsKKyAgICAgICAg cmV0dXJuIHRydWU7CisgICAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4g KCEoJGlucHV0LnZhbCgpID09ICIiICYmIF8uaXNOdWxsKGRlZmF1bHRWYWx1 ZSApKSkgJiYKKyAgICAgICAgKCRpbnB1dC52YWwoKSAhPSBkZWZhdWx0VmFs dWUpOworICAgICAgfQogICAgIH07CiAKICAgICB0aGlzLnZhbGlkYXRlID0g ZnVuY3Rpb24gKCkgewpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vc3RhdGlj L2pzL3NsaWNrZ3JpZC9zbGljay5wZ2FkbWluLmZvcm1hdHRlcnMuanMgYi93 ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL3NsaWNrLnBnYWRtaW4u Zm9ybWF0dGVycy5qcwppbmRleCAyOTBiZGRkLi42MWIxZmMxIDEwMDY0NAot LS0gYS93ZWIvcGdhZG1pbi9zdGF0aWMvanMvc2xpY2tncmlkL3NsaWNrLnBn YWRtaW4uZm9ybWF0dGVycy5qcworKysgYi93ZWIvcGdhZG1pbi9zdGF0aWMv anMvc2xpY2tncmlkL3NsaWNrLnBnYWRtaW4uZm9ybWF0dGVycy5qcwpAQCAt MTksOCArMTksMTUgQEAKICAgfSk7CiAKICAgZnVuY3Rpb24gSnNvbkZvcm1h dHRlcihyb3csIGNlbGwsIHZhbHVlLCBjb2x1bW5EZWYsIGRhdGFDb250ZXh0 KSB7Ci0gICAgaWYgKHZhbHVlID09IG51bGwgfHwgdmFsdWUgPT09ICIiKSB7 Ci0gICAgICByZXR1cm4gIiI7CisgICAgLy8gSWYgY29sdW1uIGhhcyBkZWZh dWx0IHZhbHVlLCBzZXQgcGxhY2Vob2xkZXIKKyAgICBpZiAoXy5pc1VuZGVm aW5lZCh2YWx1ZSkgJiYgY29sdW1uRGVmLmhhc19kZWZhdWx0X3ZhbCkgewor ICAgICAgcmV0dXJuICI8c3BhbiBjbGFzcz0ncHVsbC1sZWZ0Jz5bZGVmYXVs dF08L3NwYW4+IjsKKyAgICB9CisgICAgZWxzZSBpZiAoXy5pc1VuZGVmaW5l ZCh2YWx1ZSkgJiYgY29sdW1uRGVmLm5vdF9udWxsKSB7CisgICAgICByZXR1 cm4gbnVsbDsgLy8gSWYgbnVsbCB2YWx1ZSBub3QgYWxsb3dlZCwgc2V0IGNl bGwgdG8gYmxhbmsKKyAgICB9CisgICAgZWxzZSBpZiAoXy5pc1VuZGVmaW5l ZCh2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpIHsKKyAgICAgIHJldHVybiAi PHNwYW4gY2xhc3M9J3B1bGwtbGVmdCc+W251bGxdPC9zcGFuPiI7CiAgICAg fSBlbHNlIHsKICAgICAgIC8vIFN0cmluZ2lmeSBvbmx5IGlmIGl0J3MganNv biBvYmplY3QKICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT09ICJvYmplY3Qi ICYmICFBcnJheS5pc0FycmF5KHZhbHVlKSkgewpAQCAtNDIsNyArNDksMTQg QEAKICAgfQogCiAgIGZ1bmN0aW9uIE51bWJlcnNGb3JtYXR0ZXIocm93LCBj ZWxsLCB2YWx1ZSwgY29sdW1uRGVmLCBkYXRhQ29udGV4dCkgewotICAgIGlm IChfLmlzVW5kZWZpbmVkKHZhbHVlKSB8fCB2YWx1ZSA9PT0gbnVsbCkgewor ICAgIC8vIElmIGNvbHVtbiBoYXMgZGVmYXVsdCB2YWx1ZSwgc2V0IHBsYWNl aG9sZGVyCisgICAgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpICYmIGNvbHVt bkRlZi5oYXNfZGVmYXVsdF92YWwpIHsKKyAgICAgIHJldHVybiAiPHNwYW4g Y2xhc3M9J3B1bGwtcmlnaHQnPltkZWZhdWx0XTwvc3Bhbj4iOworICAgIH0K KyAgICBlbHNlIGlmIChfLmlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjb2x1bW5E ZWYubm90X251bGwpIHsKKyAgICAgIHJldHVybiAnJzsgLy8gSWYgbnVsbCB2 YWx1ZSBub3QgYWxsb3dlZCwgc2V0IGNlbGwgdG8gYmxhbmsKKyAgICB9Cisg ICAgZWxzZSBpZiAoXy5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWUgPT09 IG51bGwpIHsKICAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9J3B1bGwtcmln aHQnPltudWxsXTwvc3Bhbj4iOwogICAgIH0KICAgICBlbHNlIGlmICh2YWx1 ZSA9PT0gIiIpIHsKQEAgLTU3LDE2ICs3MSwyOSBAQAogICAgIC8qIENoZWNr Ym94IGhhcyAzIHN0YXRlcwogICAgICAqIDEpIGNoZWNrZWQ9dHJ1ZQogICAg ICAqIDIpIHVuY2hlY2tlZD1mYWxzZQotICAgICAqIDMpIGluZGV0ZXJtaW5h dGU9bnVsbC8nJworICAgICAqIDMpIGluZGV0ZXJtaW5hdGU9bnVsbAogICAg ICAqLwotICAgIGlmICh2YWx1ZSA9PSBudWxsIHx8IHZhbHVlID09PSAiIikg eworICAgIGlmIChfLmlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjb2x1bW5EZWYu aGFzX2RlZmF1bHRfdmFsKSB7CisgICAgICByZXR1cm4gIjxzcGFuIGNsYXNz PSdwdWxsLWxlZnQnPltkZWZhdWx0XTwvc3Bhbj4iOworICAgIH0KKyAgICBl bHNlIGlmIChfLmlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjb2x1bW5EZWYubm90 X251bGwpIHsKKyAgICAgIHJldHVybiAnJzsgLy8gSWYgbnVsbCB2YWx1ZSBu b3QgYWxsb3dlZCwgc2V0IGNlbGwgdG8gYmxhbmsKKyAgICB9CisgICAgZWxz ZSBpZiAodmFsdWUgPT0gbnVsbCB8fCB2YWx1ZSA9PT0gIiIpIHsKICAgICAg IHJldHVybiAiPHNwYW4gY2xhc3M9J3B1bGwtbGVmdCc+W251bGxdPC9zcGFu PiI7CiAgICAgfQogICAgIHJldHVybiB2YWx1ZSA/ICJ0cnVlIiA6ICJmYWxz ZSI7CiAgIH0KIAogICBmdW5jdGlvbiBUZXh0Rm9ybWF0dGVyKHJvdywgY2Vs bCwgdmFsdWUsIGNvbHVtbkRlZiwgZGF0YUNvbnRleHQpIHsKLSAgICBpZiAo Xy5pc1VuZGVmaW5lZCh2YWx1ZSkgfHwgdmFsdWUgPT09IG51bGwpIHsKKyAg ICAvLyBJZiBjb2x1bW4gaGFzIGRlZmF1bHQgdmFsdWUsIHNldCBwbGFjZWhv bGRlcgorICAgIGlmIChfLmlzVW5kZWZpbmVkKHZhbHVlKSAmJiBjb2x1bW5E ZWYuaGFzX2RlZmF1bHRfdmFsKSB7CisgICAgICAgIHJldHVybiAiPHNwYW4g Y2xhc3M9J3B1bGwtbGVmdCc+W2RlZmF1bHRdPC9zcGFuPiI7CisgICAgfQor ICAgIGVsc2UgaWYgKF8uaXNVbmRlZmluZWQodmFsdWUpICYmIGNvbHVtbkRl Zi5ub3RfbnVsbCkgeworICAgICAgcmV0dXJuICcnOyAvLyBJZiBudWxsIHZh bHVlIG5vdCBhbGxvd2VkLCBzZXQgY2VsbCB0byBibGFuaworICAgIH0KKyAg ICBlbHNlIGlmIChfLmlzVW5kZWZpbmVkKHZhbHVlKSB8fCBfLmlzTnVsbCh2 YWx1ZSkpIHsKICAgICAgIHJldHVybiAiPHNwYW4gY2xhc3M9J3B1bGwtbGVm dCc+W251bGxdPC9zcGFuPiI7CiAgICAgfQogICAgIGVsc2UgewpkaWZmIC0t Z2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5 IGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL19faW5pdF9fLnB5Cmlu ZGV4IGQxMTQ5ODguLmY3NDY2ZDggMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWlu L3Rvb2xzL3NxbGVkaXRvci9fX2luaXRfXy5weQorKysgYi93ZWIvcGdhZG1p bi90b29scy9zcWxlZGl0b3IvX19pbml0X18ucHkKQEAgLTQ0MCw4ICs0NDAs MjMgQEAgZGVmIGdldF9jb2x1bW5zKHRyYW5zX2lkKToKICAgICBjb2x1bW5z ID0gZGljdCgpCiAgICAgY29sdW1uc19pbmZvID0gTm9uZQogICAgIHByaW1h cnlfa2V5cyA9IE5vbmUKKyAgICByc2V0ID0gTm9uZQogICAgIHN0YXR1cywg ZXJyb3JfbXNnLCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25fb2JqID0gY2hl Y2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRyYW5zX2lkKQogICAgIGlmIHN0YXR1 cyBhbmQgY29ubiBpcyBub3QgTm9uZSBhbmQgc2Vzc2lvbl9vYmogaXMgbm90 IE5vbmU6CisKKyAgICAgICAgdmVyID0gY29ubi5tYW5hZ2VyLnZlcnNpb24K KyAgICAgICAgIyBHZXQgdGhlIHRlbXBsYXRlIHBhdGggZm9yIHRoZSBjb2x1 bW4KKyAgICAgICAgdGVtcGxhdGVfcGF0aCA9ICdjb2x1bW4vc3FsLyN7MH0j Jy5mb3JtYXQodmVyKQorICAgICAgICBjb21tYW5kX29iaiA9IHBpY2tsZS5s b2FkcyhzZXNzaW9uX29ialsnY29tbWFuZF9vYmonXSkKKyAgICAgICAgaWYg aGFzYXR0cihjb21tYW5kX29iaiwgJ29ial9pZCcpOgorICAgICAgICAgICAg U1FMID0gcmVuZGVyX3RlbXBsYXRlKCIvIi5qb2luKFt0ZW1wbGF0ZV9wYXRo LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAnbm9kZXMuc3FsJ10pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRpZD1jb21tYW5kX29iai5vYmpfaWQpCisgICAgICAgICAgICAj IHJvd3Mgd2l0aCBhdHRyaWJ1dGUgbm90X251bGwKKyAgICAgICAgICAgIHN0 YXR1cywgcnNldCA9IGNvbm4uZXhlY3V0ZV8yZGFycmF5KFNRTCkKKyAgICAg ICAgICAgIGlmIG5vdCBzdGF0dXM6CisgICAgICAgICAgICAgICAgcmV0dXJu IGludGVybmFsX3NlcnZlcl9lcnJvcihlcnJvcm1zZz1yc2V0KQorCiAgICAg ICAgICMgQ2hlY2sgUEsgY29sdW1uIGluZm8gaXMgYXZhaWxhYmxlIG9yIG5v dAogICAgICAgICBpZiAncHJpbWFyeV9rZXlzJyBpbiBzZXNzaW9uX29iajoK ICAgICAgICAgICAgIHByaW1hcnlfa2V5cyA9IHNlc3Npb25fb2JqWydwcmlt YXJ5X2tleXMnXQpAQCAtNDQ5LDEwICs0NjQsMTcgQEAgZGVmIGdldF9jb2x1 bW5zKHRyYW5zX2lkKToKICAgICAgICAgIyBGZXRjaCBjb2x1bW4gaW5mb3Jt YXRpb24KICAgICAgICAgY29sdW1uc19pbmZvID0gY29ubi5nZXRfY29sdW1u X2luZm8oKQogICAgICAgICBpZiBjb2x1bW5zX2luZm8gaXMgbm90IE5vbmU6 Ci0gICAgICAgICAgICBmb3IgY29sIGluIGNvbHVtbnNfaW5mbzoKKyAgICAg ICAgICAgIGZvciBrZXksIGNvbCBpbiBlbnVtZXJhdGUoY29sdW1uc19pbmZv KToKICAgICAgICAgICAgICAgICBjb2xfdHlwZSA9IGRpY3QoKQogICAgICAg ICAgICAgICAgIGNvbF90eXBlWyd0eXBlX2NvZGUnXSA9IGNvbFsndHlwZV9j b2RlJ10KICAgICAgICAgICAgICAgICBjb2xfdHlwZVsndHlwZV9uYW1lJ10g PSBOb25lCisgICAgICAgICAgICAgICAgaWYgcnNldDoKKyAgICAgICAgICAg ICAgICAgICAgY29sX3R5cGVbJ25vdF9udWxsJ10gPSBjb2xbJ25vdF9udWxs J10gPSBcCisgICAgICAgICAgICAgICAgICAgICAgICByc2V0Wydyb3dzJ11b a2V5XVsnbm90X251bGwnXQorCisgICAgICAgICAgICAgICAgICAgIGNvbF90 eXBlWydoYXNfZGVmYXVsdF92YWwnXSA9IGNvbFsnaGFzX2RlZmF1bHRfdmFs J10gPSBcCisgICAgICAgICAgICAgICAgICAgICAgICByc2V0Wydyb3dzJ11b a2V5XVsnaGFzX2RlZmF1bHRfdmFsJ10KKwogICAgICAgICAgICAgICAgIGNv bHVtbnNbY29sWyduYW1lJ11dID0gY29sX3R5cGUKIAogICAgICAgICAjIEFz IHdlIGNoYW5nZWQgdGhlIHRyYW5zYWN0aW9uIG9iamVjdCB3ZSBuZWVkIHRv CkBAIC02MDIsNiArNjI0LDcgQEAgZGVmIHNhdmUodHJhbnNfaWQpOgogICAg IHN0YXR1cywgZXJyb3JfbXNnLCBjb25uLCB0cmFuc19vYmosIHNlc3Npb25f b2JqID0gY2hlY2tfdHJhbnNhY3Rpb25fc3RhdHVzKHRyYW5zX2lkKQogICAg IGlmIHN0YXR1cyBhbmQgY29ubiBpcyBub3QgTm9uZSBcCiAgICAgICAgICAg ICBhbmQgdHJhbnNfb2JqIGlzIG5vdCBOb25lIGFuZCBzZXNzaW9uX29iaiBp cyBub3QgTm9uZToKKyAgICAgICAgc2V0YXR0cih0cmFuc19vYmosICdjb2x1 bW5zX2luZm8nLCBzZXNzaW9uX29ialsnY29sdW1uc19pbmZvJ10pCiAKICAg ICAgICAgIyBJZiB0aGVyZSBpcyBubyBwcmltYXJ5IGtleSBmb3VuZCB0aGVu IHJldHVybiBmcm9tIHRoZSBmdW5jdGlvbi4KICAgICAgICAgaWYgbGVuKHNl c3Npb25fb2JqWydwcmltYXJ5X2tleXMnXSkgPD0gMCBvciBsZW4oY2hhbmdl ZF9kYXRhKSA8PSAwOgpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRtaW4vdG9vbHMv c3FsZWRpdG9yL2NvbW1hbmQucHkgYi93ZWIvcGdhZG1pbi90b29scy9zcWxl ZGl0b3IvY29tbWFuZC5weQppbmRleCAxNzk1MTU1Li5lMzk2OTgxIDEwMDY0 NAotLS0gYS93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5w eQorKysgYi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvY29tbWFuZC5w eQpAQCAtNDQyLDYgKzQ0MiwyMyBAQCBjbGFzcyBUYWJsZUNvbW1hbmQoR3Jp ZENvbW1hbmQpOgogCiAgICAgICAgICAgICAgICAgIyBGb3IgbmV3bHkgYWRk ZWQgcm93cwogICAgICAgICAgICAgICAgIGlmIG9mX3R5cGUgPT0gJ2FkZGVk JzoKKworICAgICAgICAgICAgICAgICAgICAjIFdoZW4gbmV3IHJvd3MgYXJl IGFkZGVkLCBvbmx5IGNoYW5nZWQgY29sdW1ucyBkYXRhIGlzCisgICAgICAg ICAgICAgICAgICAgICMgc2VudCBmcm9tIGNsaWVudCBzaWRlLiBCdXQgaWYg Y29sdW1uIGlzIG5vdF9udWxsIGFuZCBoYXMKKyAgICAgICAgICAgICAgICAg ICAgIyBub19kZWZhdWx0X3ZhbHVlLCBzZXQgY29sdW1uIHRvIGJsYW5rLCBp bnN0ZWFkCisgICAgICAgICAgICAgICAgICAgICMgb2Ygbm90IG51bGwgd2hp Y2ggaXMgc2V0IGJ5IGRlZmF1bHQuCisgICAgICAgICAgICAgICAgICAgIGNv bHVtbl9kYXRhID0ge30KKyAgICAgICAgICAgICAgICAgICAgY29sdW1uX3R5 cGUgPSB7fQorICAgICAgICAgICAgICAgICAgICBmb3IgZWFjaF9jb2wgaW4g c2VsZi5jb2x1bW5zX2luZm86CisgICAgICAgICAgICAgICAgICAgICAgICBp ZiAoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5jb2x1bW5z X2luZm9bZWFjaF9jb2xdWydub3RfbnVsbCddIGFuZAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIG5vdCBzZWxmLmNvbHVtbnNfaW5mb1tlYWNoX2Nv bF1bCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdoYXNfZGVm YXVsdF92YWwnXQorICAgICAgICAgICAgICAgICAgICAgICAgKToKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YVtlYWNoX2NvbF0g PSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90eXBl W2VhY2hfY29sXSA9XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzZWxmLmNvbHVtbnNfaW5mb1tlYWNoX2NvbF1bJ3R5cGVfbmFtZSddCisK ICAgICAgICAgICAgICAgICAgICAgZm9yIGVhY2hfcm93IGluIGNoYW5nZWRf ZGF0YVtvZl90eXBlXToKICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEg PSBjaGFuZ2VkX2RhdGFbb2ZfdHlwZV1bZWFjaF9yb3ddWydkYXRhJ10KICAg ICAgICAgICAgICAgICAgICAgICAgICMgUmVtb3ZlIG91ciB1bmlxdWUgdHJh Y2tpbmcga2V5CkBAIC00NTAsMTIgKzQ2NywxOCBAQCBjbGFzcyBUYWJsZUNv bW1hbmQoR3JpZENvbW1hbmQpOgogICAgICAgICAgICAgICAgICAgICAgICAg ZGF0YV90eXBlID0gc2V0X2NvbHVtbl9uYW1lcyhjaGFuZ2VkX2RhdGFbb2Zf dHlwZV1bZWFjaF9yb3ddWydkYXRhX3R5cGUnXSkKICAgICAgICAgICAgICAg ICAgICAgICAgIGxpc3Rfb2Zfcm93aWQuYXBwZW5kKGRhdGEuZ2V0KCdfX3Rl bXBfUEsnKSkKIAorICAgICAgICAgICAgICAgICAgICAgICAgIyBVcGRhdGUg Y29sdW1ucyB2YWx1ZSBhbmQgZGF0YSB0eXBlCisgICAgICAgICAgICAgICAg ICAgICAgICAjIHdpdGggY29sdW1ucyBoYXZpbmcgbm90X251bGw9RmFsc2Ug YW5kIGhhcworICAgICAgICAgICAgICAgICAgICAgICAgIyBubyBkZWZhdWx0 IHZhbHVlCisgICAgICAgICAgICAgICAgICAgICAgICBjb2x1bW5fZGF0YS51 cGRhdGUoZGF0YSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbHVtbl90 eXBlLnVwZGF0ZShkYXRhX3R5cGUpCisKICAgICAgICAgICAgICAgICAgICAg ICAgIHNxbCA9IHJlbmRlcl90ZW1wbGF0ZSgiLyIuam9pbihbc2VsZi5zcWxf cGF0aCwgJ2luc2VydC5zcWwnXSksCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGF0YV90b19iZV9zYXZlZD1kYXRh LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGRhdGFfdG9fYmVfc2F2ZWQ9Y29sdW1uX2RhdGEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJpbWFyeV9r ZXlzPU5vbmUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgb2JqZWN0X25hbWU9c2VsZi5vYmplY3RfbmFtZSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu c3BfbmFtZT1zZWxmLm5zcF9uYW1lLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFfdHlwZT1kYXRhX3R5cGUp CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZGF0YV90eXBlPWNvbHVtbl90eXBlKQogICAgICAgICAgICAgICAgICAg ICAgICAgbGlzdF9vZl9zcWwuYXBwZW5kKHNxbCkKIAogICAgICAgICAgICAg ICAgICMgRm9yIHVwZGF0ZWQgcm93cwpkaWZmIC0tZ2l0IGEvd2ViL3BnYWRt aW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBsYXRlcy9zcWxlZGl0b3IvanMvc3Fs ZWRpdG9yLmpzIGIvd2ViL3BnYWRtaW4vdG9vbHMvc3FsZWRpdG9yL3RlbXBs YXRlcy9zcWxlZGl0b3IvanMvc3FsZWRpdG9yLmpzCmluZGV4IDIwNjJhYTIu LjY5MTViYjEgMTAwNjQ0Ci0tLSBhL3dlYi9wZ2FkbWluL3Rvb2xzL3NxbGVk aXRvci90ZW1wbGF0ZXMvc3FsZWRpdG9yL2pzL3NxbGVkaXRvci5qcworKysg Yi93ZWIvcGdhZG1pbi90b29scy9zcWxlZGl0b3IvdGVtcGxhdGVzL3NxbGVk aXRvci9qcy9zcWxlZGl0b3IuanMKQEAgLTUyNiw2ICs1MjYsMTkgQEAgZGVm aW5lKAogICAgICAgcmVuZGVyX2dyaWQ6IGZ1bmN0aW9uKGNvbGxlY3Rpb24s IGNvbHVtbnMsIGlzX2VkaXRhYmxlKSB7CiAgICAgICAgIHZhciBzZWxmID0g dGhpczsKIAorICAgICAgICB2YXIgcmVxdWlyZWRGaWVsZFZhbGlkYXRvciA9 IGZ1bmN0aW9uICh2YWx1ZSkgeworICAgICAgICAgIC8vIElmIHZhbHVlIGlm IG9mIGJvb2xlYW4gdHlwZSwKKyAgICAgICAgICAvLyB0aGUgY29tcGFyaXNp b24gZm9yIHZhbHVlKGZhbHNlKSA9PSAnJyByZXR1cm5zIHRydWUKKyAgICAg ICAgICAvLyBzbyBzZXQgaXQgdG8gc29tZSBhbm90aGVyIHZhbHVlLgorICAg ICAgICAgIGlmICh0eXBlb2YodmFsdWUpID09PSAnYm9vbGVhbicpCisgICAg ICAgICAgICB2YWx1ZSA9IDI7CisKKyAgICAgICAgICBpZiAoXy5pc1VuZGVm aW5lZCh2YWx1ZSkgfHwgXy5pc051bGwodmFsdWUpIHx8IHZhbHVlID09ICcn KSB7CisgICAgICAgICAgICByZXR1cm4ge3ZhbGlkOiBmYWxzZSwgbXNnOiAi VGhpcyBpcyBhIHJlcXVpcmVkIGZpZWxkIn07CisgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgIHJldHVybiB7dmFsaWQ6IHRydWUsIG1zZzogbnVs bH07CisgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIC8vIFRoaXMg d2lsbCB3b3JrIGFzIGRhdGEgc3RvcmUgYW5kIGhvbGRzIGFsbCB0aGUKICAg ICAgICAgLy8gaW5zZXJ0ZWQvdXBkYXRlZC9kZWxldGVkIGRhdGEgZnJvbSBn cmlkCiAgICAgICAgIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlID0gewpAQCAt NTU3LDcgKzU3MCwxMCBAQCBkZWZpbmUoCiAgICAgICAgICAgICAgIGlkOiBj Lm5hbWUsCiAgICAgICAgICAgICAgIHBvczogYy5wb3MsCiAgICAgICAgICAg ICAgIGZpZWxkOiBjLm5hbWUsCi0gICAgICAgICAgICAgIG5hbWU6IGMubGFi ZWwKKyAgICAgICAgICAgICAgbmFtZTogYy5sYWJlbCwKKyAgICAgICAgICAg ICAgbm90X251bGw6IGMubm90X251bGwsCisgICAgICAgICAgICAgIGhhc19k ZWZhdWx0X3ZhbDogYy5oYXNfZGVmYXVsdF92YWwsCisgICAgICAgICAgICAg IHZhbGlkYXRvcjogYy5ub3RfbnVsbCA/IHJlcXVpcmVkRmllbGRWYWxpZGF0 b3IgOiBudWxsCiAgICAgICAgICAgICB9OwogCiAgICAgICAgICAgICAvLyBH ZXQgdGhlIGNvbHVtbnMgd2lkdGggYmFzZWQgb24gZGF0YSB0eXBlCkBAIC04 MDYsNiArODIyLDMyIEBAIGRlZmluZSgKICAgICAgICAgICAkKCIjYnRuLXNh dmUiKS5wcm9wKCdkaXNhYmxlZCcsIGZhbHNlKTsKICAgICAgICAgfS5iaW5k KGVkaXRvcl9kYXRhKSk7CiAKKyAgICAgICAgLy8gVmFsaWRhdGUgZWFjaCBj ZWxsIG9mIG5ldyBhZGRlZCByb3cuCisgICAgICAgIHZhciB2YWxpZGF0ZVJv dyA9IGZ1bmN0aW9uKGdyaWQsIHJvd0lkeCkgeworICAgICAgICAgIHZhciBp c192YWxpZCA9IHRydWU7CisgICAgICAgICAgJC5lYWNoKGdyaWQuZ2V0Q29s dW1ucygpLCBmdW5jdGlvbihjb2xJZHgsIGNvbHVtbikgeworICAgICAgICAg ICAgICAgIC8vIGl0ZXJhdGUgdGhyb3VnaCBlZGl0YWJsZSBjZWxscworICAg ICAgICAgICAgICAgIC8vIFNraXAgZmlyc3QgY29sdW1uIC0gU2VsZWN0IGFs bAorICAgICAgICAgICAgICAgIGlmIChjb2xJZHggJiYgY29sSWR4ICE9PTAp IHsKKyAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gZ3JpZC5nZXREYXRh KClbcm93SWR4XVtjb2xJZHgtMV0gfHwgJyc7CisKKyAgICAgICAgICAgICAg ICAgIGlmIChjb2x1bW4uZWRpdG9yICYmIGNvbHVtbi52YWxpZGF0b3IgJiYg Y29sdW1uLm5vdF9udWxsICYmCisgICAgICAgICAgICAgICAgICAhY29sdW1u Lmhhc19kZWZhdWx0X3ZhbCkgeworICAgICAgICAgICAgICAgICAgICAgIHZh ciB2YWxpZGF0aW9uUmVzdWx0cyA9IGNvbHVtbi52YWxpZGF0b3IoaXRlbSk7 CisgICAgICAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZGF0aW9uUmVzdWx0 cy52YWxpZCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBzaG93 IGVkaXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICBncmlkLmdvdG9D ZWxsKHJvd0lkeCwgY29sSWR4LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgLy8gdmFsaWRhdGUgKGl0IHdpbGwgZmFpbCkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgZ3JpZC5nZXRFZGl0b3JMb2NrKCkuY29tbWl0 Q3VycmVudEVkaXQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g c3RvcCBpdGVyYXRpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgaXNf dmFsaWQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0 dXJuIGlzX3ZhbGlkOworICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAg ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9KTsKKyAgICAgICAgICAgIHJldHVybiBpc192YWxpZDsKKyAgICAgICAg fQogICAgICAgICAvLyBMaXN0ZW5lciBmdW5jdGlvbiB3aGljaCB3aWxsIGJl IGNhbGxlZCB3aGVuIHVzZXIgYWRkcyBuZXcgcm93cwogICAgICAgICBncmlk Lm9uQWRkTmV3Um93LnN1YnNjcmliZShmdW5jdGlvbiAoZSwgYXJncykgewog ICAgICAgICAgIC8vIHNlbGYuaGFuZGxlci5kYXRhX3N0b3JlLmFkZGVkIHdp bGwgaG9sZHMgYWxsIHRoZSBuZXdseSBhZGRlZCByb3dzL2RhdGEKQEAgLTgy Niw4ICs4NjgsMTAgQEAgZGVmaW5lKAogICAgICAgICAgIGdyaWQuaW52YWxp ZGF0ZVJvd3MoW2NvbGxlY3Rpb24ubGVuZ3RoIC0gMV0pOwogICAgICAgICAg IGdyaWQudXBkYXRlUm93Q291bnQoKTsKICAgICAgICAgICBncmlkLnJlbmRl cigpOworICAgICAgICAgIC8vIE9uY2UgbmV3IHJvdyBpcyByZW5kZXJlZCwg dmFsaWRhdGUgcm93CisgICAgICAgICAgdmFyIGlzX3ZhbGlkID0gdmFsaWRh dGVSb3coYXJncy5ncmlkLCBhcmdzLmdyaWQuZ2V0QWN0aXZlQ2VsbCgpLnJv dyk7CiAgICAgICAgICAgLy8gRW5hYmxlIHNhdmUgYnV0dG9uCi0gICAgICAg ICAgJCgiI2J0bi1zYXZlIikucHJvcCgnZGlzYWJsZWQnLCBmYWxzZSk7Cisg ICAgICAgICAgJCgiI2J0bi1zYXZlIikucHJvcCgnZGlzYWJsZWQnLCAhaXNf dmFsaWQpOwogICAgICAgICB9LmJpbmQoZWRpdG9yX2RhdGEpKTsKIAogICAg ICAgICAvLyBSZXNpemUgU2xpY2tHcmlkIHdoZW4gd2luZG93IHJlc2l6ZQpA QCAtMjA3Nyw3ICsyMTIxLDkgQEAgZGVmaW5lKAogICAgICAgICAgICAgICAg ICAgICAnbGFiZWwnOiBjb2x1bW5fbGFiZWwsCiAgICAgICAgICAgICAgICAg ICAgICdjZWxsJzogY29sX2NlbGwsCiAgICAgICAgICAgICAgICAgICAgICdj YW5fZWRpdCc6IHNlbGYuY2FuX2VkaXQsCi0gICAgICAgICAgICAgICAgICAg ICd0eXBlJzogdHlwZQorICAgICAgICAgICAgICAgICAgICAndHlwZSc6IHR5 cGUsCisgICAgICAgICAgICAgICAgICAgICdub3RfbnVsbCc6IGMubm90X251 bGwsCisgICAgICAgICAgICAgICAgICAgICdoYXNfZGVmYXVsdF92YWwnOiBj Lmhhc19kZWZhdWx0X3ZhbAogICAgICAgICAgICAgICAgICAgfTsKICAgICAg ICAgICAgICAgICAgIGNvbHVtbnMucHVzaChjb2wpOwogICAgICAgICAgICAg ICAgIH0pOwo= --001a1146b7bcc85ff8054ec5881c 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 --001a1146b7bcc85ff8054ec5881c--