Greenplum specific DDL and Dashboard display changes.

Initial patch by Sarah McAlear<smcalear@pivotal.io>.
This commit is contained in:
Teng Zhang
2017-08-25 17:53:03 +05:30
committed by Akshay Joshi
parent d3babd78aa
commit 46c5df4e7b
12 changed files with 383 additions and 16 deletions

View File

@@ -0,0 +1 @@
Some default SQL for GPDB

View File

@@ -23,7 +23,10 @@ class TestVersionedTemplateLoader(BaseTestGenerator):
("Render a version 9.1 template when it is present", dict(scenario=2)),
("Render a version 9.2 template when request for a higher version", dict(scenario=3)),
("Render default version when version 9.0 was requested and only 9.1 and 9.2 are present", dict(scenario=4)),
("Raise error when version is smaller than available templates", dict(scenario=5))
("Raise error when version is smaller than available templates", dict(scenario=5)),
("Render a version GPDB 5.0 template when it is present", dict(scenario=6)),
("Render a version GPDB 5.0 template when it is in default", dict(scenario=7)),
("Raise error when version is gpdb but template does not exist", dict(scenario=8))
]
def setUp(self):
@@ -40,6 +43,12 @@ class TestVersionedTemplateLoader(BaseTestGenerator):
self.test_get_source_when_version_is_9_0_and_there_are_templates_for_9_1_and_9_2_returns_default_template()
if self.scenario == 5:
self.test_raise_not_found_exception_when_postgres_version_less_than_all_available_sql_templates()
if self.scenario == 6:
self.test_get_source_when_the_version_is_gpdb_5_0_returns_gpdb_5_0_template()
if self.scenario == 7:
self.test_get_source_when_the_version_is_gpdb_5_0_returns_default_template()
if self.scenario == 8:
self.test_raise_not_found_exception_when_the_version_is_gpdb_template_not_exist()
def test_get_source_returns_a_template(self):
expected_content = "Some SQL" \
@@ -86,6 +95,31 @@ class TestVersionedTemplateLoader(BaseTestGenerator):
except TemplateNotFound:
return
def test_get_source_when_the_version_is_gpdb_5_0_returns_gpdb_5_0_template(self):
expected_content = "Some default SQL for GPDB\n"
# For cross platform we join the SQL path (This solves the slashes issue)
sql_path = os.path.join("some_feature", "sql", "gpdb_5.0_plus", "some_action_with_gpdb_5_0.sql")
content, filename, up_to_dateness = self.loader.get_source(None, "some_feature/sql/#gpdb#80323#/some_action_with_gpdb_5_0.sql")
self.assertEqual(expected_content, str(content).replace("\r", ""))
self.assertIn(sql_path, filename)
def test_get_source_when_the_version_is_gpdb_5_0_returns_default_template(self):
expected_content = "Some default SQL"
# For cross platform we join the SQL path (This solves the slashes issue)
sql_path = os.path.join("some_feature", "sql", "default", "some_action_with_default.sql")
content, filename, up_to_dateness = self.loader.get_source(None, "some_feature/sql/#gpdb#80323#/some_action_with_default.sql")
self.assertEqual(expected_content, str(content).replace("\r", ""))
self.assertIn(sql_path, filename)
def test_raise_not_found_exception_when_the_version_is_gpdb_template_not_exist(self):
try:
self.loader.get_source(None, "some_feature/sql/#gpdb#50100#/some_action.sql")
self.fail("No exception raised")
except TemplateNotFound:
return
class FakeApp(Flask):
def __init__(self):

View File

@@ -13,9 +13,9 @@ from jinja2 import TemplateNotFound
class VersionedTemplateLoader(DispatchingJinjaLoader):
def get_source(self, environment, template):
template_path_parts = template.split("#", 2)
template_path_parts = template.split("#", 3)
server_versions = (
postgres_versions = (
{'name': "10_plus", 'number': 100000},
{'name': "9.6_plus", 'number': 90600},
{'name': "9.5_plus", 'number': 90500},
@@ -27,18 +27,29 @@ class VersionedTemplateLoader(DispatchingJinjaLoader):
{'name': "default", 'number': 0}
)
gpdb_versions = (
{'name': "gpdb_5.0_plus", 'number': 80323},
{'name': "default", 'number': 0}
)
server_versions = postgres_versions
if len(template_path_parts) == 1:
return super(VersionedTemplateLoader, self).get_source(environment, template)
if len(template_path_parts) == 4:
path_start, server_type, specified_version_number, file_name = template_path_parts
if server_type == 'gpdb':
server_versions = gpdb_versions
else:
for server_version in server_versions:
path_start, specified_version_number, file_name = template_path_parts
path_start, specified_version_number, file_name = template_path_parts
if server_version['number'] > int(specified_version_number):
continue
for server_version in server_versions:
if server_version['number'] > int(specified_version_number):
continue
template_path = path_start + '/' + server_version['name'] + '/' + file_name
try:
return super(VersionedTemplateLoader, self).get_source(environment, template_path)
except TemplateNotFound:
continue
raise TemplateNotFound(template)
template_path = path_start + '/' + server_version['name'] + '/' + file_name
try:
return super(VersionedTemplateLoader, self).get_source(environment, template_path)
except TemplateNotFound:
continue
raise TemplateNotFound(template)