mirror of
https://github.com/pgadmin-org/pgadmin4.git
synced 2024-11-22 16:56:30 -06:00
Insert rows correctly when a table has OIDs and a Primary Key in uppercase. Fixes #3135
This commit is contained in:
parent
e7316e2181
commit
ae5c13188d
@ -6,5 +6,5 @@ INSERT INTO {{ conn|qtIdent(nsp_name, object_name) }} (
|
||||
{% for col in data_to_be_saved %}
|
||||
{% if not loop.first %}, {% endif %}%({{ col }})s::{{ data_type[col] }}{% endfor %}
|
||||
)
|
||||
{% if pk_names %} returning {{pk_names}}{% endif %}
|
||||
{% if pk_names and not has_oids %} returning {{pk_names}}{% endif %}
|
||||
{% if has_oids %} returning oid{% endif %};
|
||||
|
217
web/pgadmin/tools/sqleditor/tests/test_view_data_templates.py
Normal file
217
web/pgadmin/tools/sqleditor/tests/test_view_data_templates.py
Normal file
@ -0,0 +1,217 @@
|
||||
##########################################################################
|
||||
#
|
||||
# pgAdmin 4 - PostgreSQL Tools
|
||||
#
|
||||
# Copyright (C) 2013 - 2018, The pgAdmin Development Team
|
||||
# This software is released under the PostgreSQL Licence
|
||||
#
|
||||
##########################################################################
|
||||
|
||||
import os
|
||||
import re
|
||||
|
||||
from flask import Flask, render_template
|
||||
from jinja2 import FileSystemLoader
|
||||
|
||||
from pgadmin import VersionedTemplateLoader
|
||||
from pgadmin.utils.route import BaseTestGenerator
|
||||
from pgadmin.utils.driver import get_driver
|
||||
from config import PG_DEFAULT_DRIVER
|
||||
try:
|
||||
from collections import OrderedDict
|
||||
except ImportError:
|
||||
from ordereddict import OrderedDict
|
||||
|
||||
|
||||
class TestViewDataTemplates(BaseTestGenerator):
|
||||
"""
|
||||
This class validates the template query for
|
||||
inserting and selecting table data.
|
||||
"""
|
||||
data_to_be_saved = OrderedDict()
|
||||
data_to_be_saved['id'] = '1'
|
||||
data_to_be_saved['text'] = 'just test'
|
||||
scenarios = [
|
||||
(
|
||||
'When inserting and selecting table data with only PK',
|
||||
dict(
|
||||
insert_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'insert.sql'),
|
||||
insert_parameters=dict(
|
||||
data_to_be_saved=data_to_be_saved,
|
||||
primary_keys=None,
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
data_type={'text': 'text', 'id': 'integer'},
|
||||
pk_names='id',
|
||||
has_oids=False
|
||||
),
|
||||
insert_expected_return_value='INSERT INTO'
|
||||
' test_schema.test_table'
|
||||
' (id, text) VALUES'
|
||||
' (%(id)s::integer, '
|
||||
'%(text)s::text)'
|
||||
' returning id;',
|
||||
select_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'select.sql'),
|
||||
select_parameters=dict(
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
primary_keys=OrderedDict([('id', 'int4')]),
|
||||
has_oids=False
|
||||
),
|
||||
select_expected_return_value='SELECT * FROM '
|
||||
'test_schema.test_table'
|
||||
'WHERE id = %(id)s;'
|
||||
)),
|
||||
(
|
||||
'When inserting and selecting table data with multiple PK',
|
||||
dict(
|
||||
insert_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'insert.sql'),
|
||||
insert_parameters=dict(
|
||||
data_to_be_saved=data_to_be_saved,
|
||||
primary_keys=None,
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
data_type={'text': 'text', 'id': 'integer'},
|
||||
pk_names='id, text',
|
||||
has_oids=False
|
||||
),
|
||||
insert_expected_return_value='INSERT INTO'
|
||||
' test_schema.test_table'
|
||||
' (id, text)'
|
||||
' VALUES (%(id)s::integer,'
|
||||
' %(text)s::text)'
|
||||
' returning id, text;',
|
||||
select_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'select.sql'),
|
||||
select_parameters=dict(
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
primary_keys=OrderedDict([('id', 'int4'),
|
||||
('text', 'text')]),
|
||||
has_oids=False
|
||||
),
|
||||
select_expected_return_value='SELECT * FROM'
|
||||
' test_schema.test_table'
|
||||
'WHERE id = %(id)s AND'
|
||||
' text = %(text)s;'
|
||||
)),
|
||||
(
|
||||
'When inserting and selecting table data with PK and OID',
|
||||
dict(
|
||||
insert_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'insert.sql'),
|
||||
insert_parameters=dict(
|
||||
data_to_be_saved=data_to_be_saved,
|
||||
primary_keys=None,
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
data_type={'text': 'text', 'id': 'integer'},
|
||||
pk_names='id',
|
||||
has_oids=True
|
||||
),
|
||||
insert_expected_return_value='INSERT INTO'
|
||||
' test_schema.test_table'
|
||||
' (id, text) VALUES'
|
||||
' (%(id)s::integer, '
|
||||
'%(text)s::text) '
|
||||
'returning oid;',
|
||||
select_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'select.sql'),
|
||||
select_parameters=dict(
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
primary_keys=OrderedDict([('id', 'int4')]),
|
||||
has_oids=True
|
||||
),
|
||||
select_expected_return_value='SELECT oid, * '
|
||||
'FROM test_schema.test_table'
|
||||
'WHERE oid = %(oid)s;'
|
||||
)),
|
||||
(
|
||||
'When inserting and selecting table data with only OID',
|
||||
dict(
|
||||
insert_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'insert.sql'),
|
||||
insert_parameters=dict(
|
||||
data_to_be_saved=data_to_be_saved,
|
||||
primary_keys=None,
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
data_type={'text': 'text', 'id': 'integer'},
|
||||
pk_names=None,
|
||||
has_oids=True
|
||||
),
|
||||
insert_expected_return_value='INSERT INTO'
|
||||
' test_schema.test_table'
|
||||
' (id, text) VALUES'
|
||||
' (%(id)s::integer,'
|
||||
' %(text)s::text)'
|
||||
' returning oid;',
|
||||
select_template_path=os.path.join('sqleditor',
|
||||
'sql',
|
||||
'default',
|
||||
'select.sql'),
|
||||
select_parameters=dict(
|
||||
object_name='test_table',
|
||||
nsp_name='test_schema',
|
||||
primary_keys=None,
|
||||
has_oids=True
|
||||
),
|
||||
select_expected_return_value='SELECT oid, * FROM'
|
||||
' test_schema.test_table'
|
||||
'WHERE oid = %(oid)s;'
|
||||
)
|
||||
)
|
||||
]
|
||||
|
||||
def setUp(self):
|
||||
self.loader = VersionedTemplateLoader(FakeApp())
|
||||
|
||||
def runTest(self):
|
||||
with FakeApp().app_context():
|
||||
result = render_template(self.insert_template_path,
|
||||
**self.insert_parameters)
|
||||
self.assertEqual(
|
||||
re.sub(' +', ' ', str(result).replace("\n", "")),
|
||||
re.sub(' +', ' ',
|
||||
self.insert_expected_return_value.replace("\n", "")))
|
||||
|
||||
result = render_template(self.select_template_path,
|
||||
**self.select_parameters)
|
||||
self.assertEqual(
|
||||
re.sub(' +', ' ', str(result).replace("\n", "")),
|
||||
re.sub(' +', ' ',
|
||||
self.select_expected_return_value.replace("\n", "")))
|
||||
|
||||
|
||||
class FakeApp(Flask):
|
||||
def __init__(self):
|
||||
super(FakeApp, self).__init__("")
|
||||
driver = get_driver(PG_DEFAULT_DRIVER, self)
|
||||
self.jinja_env.filters['qtLiteral'] = driver.qtLiteral
|
||||
self.jinja_env.filters['qtIdent'] = driver.qtIdent
|
||||
self.jinja_env.filters['qtTypeIdent'] = driver.qtTypeIdent
|
||||
self.jinja_loader = FileSystemLoader(
|
||||
os.path.join(
|
||||
os.path.dirname(os.path.realpath(__file__)),
|
||||
os.pardir,
|
||||
'templates'
|
||||
)
|
||||
)
|
Loading…
Reference in New Issue
Block a user