Hi, Patch looks good to me.
Thanks, Khushboo On Thu, Apr 16, 2020 at 12:07 PM navnath gadakh < navnath.gad...@enterprisedb.com> wrote: > Hi Khushboo, > > Please find the modified patch. I have removed the length from the data > types. Test cases also passing on all Postgres versions. > Thanks! > > > > On Wed, Apr 15, 2020 at 6:22 PM Ashesh Vashi < > ashesh.va...@enterprisedb.com> wrote: > >> >> >> On Wed, 15 Apr 2020 at 18:21, Ashesh Vashi <ashesh.va...@enterprisedb.com> >> wrote: >> >>> >>> >>> On Wed, 15 Apr 2020 at 18:18, Murtuza Zabuawala < >>> murtuza.zabuaw...@enterprisedb.com> wrote: >>> >>>> Hello, >>>> >>>> We are sending the data to backend and depending on errors from >>>> backend. Any thoughts on implementation of basic fronted validations? >>>> so that we can alert user before it clicks on save button. >>>> >>> We should not try to implement the database functionality in JavaScript. >>> One of the important reason for the same, we would never be able to >>> understand each and every types supported by PG/PEM. >>> >> and - types from custom extensions. >> So - no to that. >> >> — Ashesh >> >>> >>> — Ashesh >>> >>> >>>> >>>> On Wed, 15 Apr 2020, 18:08 Dave Page, <dave.p...@enterprisedb.com> >>>> wrote: >>>> >>>>> Removing the typecast will almost certainly lead to other problems. I >>>>> think we should just remove the length from it. >>>>> >>>>> On Wed, Apr 15, 2020 at 1:33 PM navnath gadakh < >>>>> navnath.gad...@enterprisedb.com> wrote: >>>>> >>>>>> @Dave Page <dave.p...@enterprisedb.com> @Akshay Joshi >>>>>> <akshay.jo...@enterprisedb.com> your input please? >>>>>> >>>>>> On Wed, Apr 15, 2020 at 3:13 PM Neel Patel < >>>>>> neel.pa...@enterprisedb.com> wrote: >>>>>> >>>>>>> Hi, >>>>>>> >>>>>>> I think we should remove the type cast from query during update and >>>>>>> whatever error is thrown should be shown to UI as per scenario 3. >>>>>>> >>>>>>> Thanks, >>>>>>> Neel Patel >>>>>>> >>>>>>> On Wed, Apr 15, 2020 at 3:06 PM Khushboo Vashi < >>>>>>> khushboo.va...@enterprisedb.com> wrote: >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Wed, Apr 15, 2020 at 2:48 PM navnath gadakh < >>>>>>>> navnath.gad...@enterprisedb.com> wrote: >>>>>>>> >>>>>>>>> Hello Hackers, >>>>>>>>> >>>>>>>>> >>>>>>>>> On Tue, Apr 14, 2020 at 5:14 PM Khushboo Vashi < >>>>>>>>> khushboo.va...@enterprisedb.com> wrote: >>>>>>>>> >>>>>>>>>> Hi Navnath, >>>>>>>>>> >>>>>>>>>> You have compared the column's internal size with the length of >>>>>>>>>> the value given by the user. >>>>>>>>>> For example, column having integer would have internal size 4 and >>>>>>>>>> if I give the value 12121 which is the correct input for the field >>>>>>>>>> will >>>>>>>>>> fail here because as per your logic column internal size (4) < >>>>>>>>>> len(value) >>>>>>>>>> (5). >>>>>>>>>> >>>>>>>>>> I think this implementation is not correct here. >>>>>>>>>> >>>>>>>>> Yes, my implementations might be wrong. >>>>>>>>> >>>>>>>>> Below are some important findings on the parameterised query(as we >>>>>>>>> are using Jinja templates for building SQL queries). >>>>>>>>> Here I have created a table 'account' with some records in it. >>>>>>>>> CREATE TABLE public.account >>>>>>>>> ( >>>>>>>>> user_id integer NOT NULL, >>>>>>>>> username character varying(5) >>>>>>>>> ) >>>>>>>>> >>>>>>>>> psycopg2 throws a proper error if I pass username value greater >>>>>>>>> than the length of the data type(5) >>>>>>>>> Now, I want to pass username value greater than data type length >>>>>>>>> (5) >>>>>>>>> >>>>>>>>> Scenario 1: Query with data type and length >>>>>>>>> >>>>>>>>> import psycopg2 >>>>>>>>> try: >>>>>>>>> conn = psycopg2.connect("dbname='postgres' user='postgres' >>>>>>>>> host='XXX.XXX.XXX.XXX' password='test' port=5432") >>>>>>>>> cur = conn.cursor() >>>>>>>>> cur.execute("UPDATE public.account SET username = >>>>>>>>> %(username)s::character varying(5) WHERE user_id = 1;", {"username": >>>>>>>>> "username-test-123"}) >>>>>>>>> cur.execute("COMMIT;") >>>>>>>>> except Exception as e: >>>>>>>>> print('Exception : {0}'.format(e)) >>>>>>>>> >>>>>>>>> *Output:* >>>>>>>>> >>>>>>>>> It will save the record with 5 char data without any error. >>>>>>>>> >>>>>>>>> *psql output:* >>>>>>>>> >>>>>>>>> postgres=# select * from public.account; >>>>>>>>> user_id | username >>>>>>>>> ---------+---------- >>>>>>>>> 1 | usern >>>>>>>>> (1 row) >>>>>>>>> >>>>>>>>> Scenario 2: Query with only data type >>>>>>>>> >>>>>>>>> import psycopg2 >>>>>>>>> try: >>>>>>>>> conn = psycopg2.connect("dbname='postgres' user='postgres' >>>>>>>>> host='XXX.XXX.XXX.XXX' password='test' port=5432") >>>>>>>>> cur = conn.cursor() >>>>>>>>> cur.execute("UPDATE public.account SET username = >>>>>>>>> %(username)s::character varying WHERE user_id = 1;", {"username": >>>>>>>>> "username-test-123"}) >>>>>>>>> cur.execute("COMMIT;") >>>>>>>>> except Exception as e: >>>>>>>>> print('Exception : {0}'.format(e)) >>>>>>>>> >>>>>>>>> *Output:* >>>>>>>>> >>>>>>>>> Exception : value too long for type character varying(5) >>>>>>>>> >>>>>>>>> data will not save in the table. >>>>>>>>> >>>>>>>>> We can consider scenario 2 as it will throw the valid exception >>>>>>>> and also typecast the value in the proper format. >>>>>>>> >>>>>>>>> Scenario 3: Query without data type >>>>>>>>> >>>>>>>>> import psycopg2 >>>>>>>>> try: >>>>>>>>> conn = psycopg2.connect("dbname='postgres' user='postgres' >>>>>>>>> host='XXX.XXX.XXX.XXX' password='test' port=5432") >>>>>>>>> cur = conn.cursor() >>>>>>>>> cur.execute("UPDATE public.account SET username = %(username)s >>>>>>>>> WHERE user_id = 1;", {"username": "username-test-123"}) >>>>>>>>> cur.execute("COMMIT;") >>>>>>>>> except Exception as e: >>>>>>>>> print('Exception : {0}'.format(e)) >>>>>>>>> >>>>>>>>> *Output:* >>>>>>>>> >>>>>>>>> Exception : value too long for type character varying(5) >>>>>>>>> >>>>>>>>> again data will not save in the table. >>>>>>>>> >>>>>>>>> These are some different behaviours with psycopg2. So to complete >>>>>>>>> this patch which apporach should I follow? or any new approach is >>>>>>>>> also welcome. >>>>>>>>> >>>>>>>>> Thanks! >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Khushboo >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> On Tue, Apr 14, 2020 at 4:33 PM navnath gadakh < >>>>>>>>>> navnath.gad...@enterprisedb.com> wrote: >>>>>>>>>> >>>>>>>>>>> Hello Hackers, >>>>>>>>>>> Please find the attached patch for below fixes: >>>>>>>>>>> >>>>>>>>>>> - Added validation for table row data that should not be larger >>>>>>>>>>> than the field size. >>>>>>>>>>> - Rearrange the existing functions to add validation. >>>>>>>>>>> - Added test cases. >>>>>>>>>>> >>>>>>>>>>> Regards, >>>>>>>>>>> Navnath Gadakh >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>> >>>>>>>>> -- >>>>>>>>> Regards, >>>>>>>>> Navnath Gadakh >>>>>>>>> >>>>>>>> >>>>>> >>>>>> -- >>>>>> Regards, >>>>>> Navnath Gadakh >>>>>> >>>>> >>>>> >>>>> -- >>>>> Dave Page >>>>> VP & Chief Architect, Database Infrastructure >>>>> EnterpriseDB: http://www.enterprisedb.com >>>>> The Enterprise PostgreSQL Company >>>>> >>>>> Blog: http://pgsnake.blogspot.com >>>>> Twitter: @pgsnake >>>>> >>>> -- >>> >>> -- >>> >>> Thanks & Regards, >>> >>> Ashesh Vashi >>> EnterpriseDB INDIA: Enterprise PostgreSQL Company >>> <http://www.enterprisedb.com> >>> >>> >>> *http://www.linkedin.com/in/asheshvashi* >>> <http://www.linkedin.com/in/asheshvashi> >>> >> -- >> >> -- >> >> Thanks & Regards, >> >> Ashesh Vashi >> EnterpriseDB INDIA: Enterprise PostgreSQL Company >> <http://www.enterprisedb.com> >> >> >> *http://www.linkedin.com/in/asheshvashi* >> <http://www.linkedin.com/in/asheshvashi> >> > > > -- > Regards, > Navnath Gadakh >