这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
555ddc7
sql functions as queries
rakeshkky Sep 22, 2018
ebcba17
handle overloaded functions, add basic test
rakeshkky Sep 24, 2018
38fb005
Merge branch 'master' into issue-333
rakeshkky Sep 24, 2018
ac8e425
fix test yaml
rakeshkky Sep 24, 2018
31e0295
Merge branch 'master' into issue-333
rakeshkky Oct 31, 2018
2a44190
improve function args generation and resolving logic
rakeshkky Oct 31, 2018
32f2dd5
Merge branch 'master' into issue-333
rakeshkky Nov 6, 2018
0af6c81
add 'function_definition' column in 'hdb_function_agg' view
rakeshkky Nov 6, 2018
3cf569b
Merge branch 'master' into issue-333
rakeshkky Nov 20, 2018
123b3c9
apply table's boolean permission on functions
rakeshkky Nov 20, 2018
e85dfe7
allow aggregations on function queries
rakeshkky Nov 20, 2018
683db2e
fix drop function
rakeshkky Nov 20, 2018
36e9b78
Merge branch 'master' into issue-333
rakeshkky Nov 23, 2018
ee4d7e3
console 'passCreateForeignKey' test to wait for 1 second
rakeshkky Nov 26, 2018
68d2ba8
Merge branch 'master' into issue-333
rakeshkky Jan 4, 2019
e329a0e
improve function info fetching SQL and function_agg view
rakeshkky Jan 7, 2019
98d9855
check for graphql schema conflicts while tracking a function
rakeshkky Jan 7, 2019
1b426c0
add docs for custom sql function
rakeshkky Jan 7, 2019
5c767ca
Merge branch 'master' into issue-333
rakeshkky Jan 8, 2019
c5fd062
fix tests
rakeshkky Jan 8, 2019
0519078
fix failing console tests by changing wait times
rakeshkky Jan 9, 2019
6154fec
modify custom functions docs
dsandip Jan 9, 2019
7c342de
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
dsandip Jan 9, 2019
81aa168
fix console tests for 'Modify Table' and 'Edit remote schema'
rakeshkky Jan 9, 2019
668c81b
Initial working version
karthikvt26 Jan 9, 2019
7c35d52
Made few cosmetics changes, link modify button correctly
karthikvt26 Jan 10, 2019
a667395
Enable track functionality for functions in RawSQL
karthikvt26 Jan 10, 2019
4bc43fc
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
karthikvt26 Jan 10, 2019
67670c5
Fix links
karthikvt26 Jan 10, 2019
749331c
Fix links
karthikvt26 Jan 10, 2019
379c03a
Match lowercase string match
karthikvt26 Jan 10, 2019
a643a32
add functions to export_metadata, replace_metadata query types
rakeshkky Jan 10, 2019
0b5f02a
add PostGIS functions example to custom functions docs
dsandip Jan 11, 2019
0cbba7f
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
dsandip Jan 11, 2019
9fac742
UI tweaks, filter functions with untracked setof table
karthikvt26 Jan 11, 2019
4c7983f
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
karthikvt26 Jan 11, 2019
bf49256
fix hdb_function_agg view definition and cli export metadata tests
rakeshkky Jan 11, 2019
b204cda
update cli test
arvi3411301 Jan 11, 2019
70698b8
Add test custom function
karthikvt26 Jan 11, 2019
4f6c605
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
karthikvt26 Jan 11, 2019
f0a03fa
Add serverCheck to enable/disable custom function
karthikvt26 Jan 11, 2019
4a22483
update docs
rikinsk Jan 11, 2019
7453798
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
rikinsk Jan 11, 2019
c6b2625
Merge remote-tracking branch 'main/master' into issue-333
karthikvt26 Jan 16, 2019
962fdf6
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
karthikvt26 Jan 16, 2019
f6be9b0
update hdb_function_agg view definition
rakeshkky Jan 18, 2019
8cce283
Merge branch 'master' into issue-333
karthikvt26 Jan 18, 2019
f04f49a
Refresh function data when schema changed on the left bar
karthikvt26 Jan 18, 2019
cd1fbb7
Add loader to show a loading icon while the data is fetched on modify…
karthikvt26 Jan 18, 2019
f919f74
Fix migration name for delete function
karthikvt26 Jan 18, 2019
76bd473
create object relationship from hdb_function_agg to hdb_table
rakeshkky Jan 18, 2019
7809ec4
Merge branch 'master' into issue-333
0x777 Jan 21, 2019
d593c93
Fix untracked functions section when a function refers to a table in …
karthikvt26 Jan 21, 2019
299b6c4
Merge branch 'issue-333' of github.com:rakeshkky/graphql-engine into …
karthikvt26 Jan 21, 2019
5c3e0d9
move entire SQL generation logic of Function Query to Select/Internal.hs
rakeshkky Jan 21, 2019
bb9f1d9
Merge branch 'master' into issue-333
rakeshkky Jan 21, 2019
c5f358f
'setAsSystemDefined' query to all versions which involves in metadata…
rakeshkky Jan 21, 2019
f171735
build schema cache before migrating metadata
rakeshkky Jan 21, 2019
5027a8c
generalise QualifiedTable and QualifiedFunction into QualifiedObject a
rakeshkky Jan 21, 2019
4fae992
check function name and argument names for GraphQL compliance
rakeshkky Jan 22, 2019
f159291
improve function info fetching and validation logic
rakeshkky Jan 22, 2019
a22808e
Merge branch 'master' into issue-333
0x777 Jan 22, 2019
f2d8a54
Merge remote-tracking branch 'main/master' into issue-333
karthikvt26 Jan 24, 2019
4d544d5
Fix based on praveen's comments
karthikvt26 Jan 24, 2019
f068d2f
Fix based on praveen's comments
karthikvt26 Jan 24, 2019
0b00abf
Merge branch 'master' into issue-333
0x777 Jan 24, 2019
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 4 additions & 2 deletions cli/commands/migrate_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,8 @@ var ravenVersions = []mt.Version{
}

var testMetadata = map[string][]byte{
"metadata": []byte(`query_templates: []
"metadata": []byte(`functions: []
query_templates: []
remote_schemas: []
tables:
- array_relationships: []
Expand All @@ -40,7 +41,8 @@ tables:
table: test
update_permissions: []
`),
"empty-metadata": []byte(`query_templates: []
"empty-metadata": []byte(`functions: []
query_templates: []
remote_schemas: []
tables: []
`),
Expand Down
68 changes: 68 additions & 0 deletions console/cypress/helpers/dataHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -38,3 +38,71 @@ export const makeDataAPIOptions = (dataApiUrl, key, body) => ({
body,
failOnStatusCode: false,
});

export const testCustomFunctionDefinition = i => `create function search_posts${'_' +
i} (search text) returns setof post as $$ select * from post where title ilike ('%' || search || '%') or content ilike ('%' || search || '%') $$ language sql stable;
`;

export const getCustomFunctionName = i => `search_posts${'_' + i}`;

export const testCustomFunctionSQL = i => {
return {
type: 'bulk',
args: [
{
type: 'run_sql',
args: {
sql: `CREATE OR REPLACE FUNCTION public.search_posts_${i}(search text)\n RETURNS SETOF post\n LANGUAGE sql\n STABLE\nAS $function$\n select *\n from post\n where\n title ilike ('%' || search || '%') or\n content ilike ('%' || search || '%')\n $function$\n`,
cascade: false,
},
},
{
type: 'track_function',
args: {
name: `search_posts_${i}`,
schema: 'public',
},
},
],
};
};

export const createTable = () => {
return {
type: 'bulk',
args: [
{
type: 'run_sql',
args: {
sql:
'create table post (\n id serial PRIMARY KEY,\n title TEXT,\n content TEXT\n )',
cascade: false,
},
},
{
type: 'add_existing_table_or_view',
args: {
name: 'post',
schema: 'public',
},
},
],
};
};

export const dropTable = () => {
return {
type: 'bulk',
args: [
{
type: 'run_sql',
args: {
sql: 'DROP table post;',
cascade: false,
},
},
],
};
};

export const getSchema = () => 'public';
104 changes: 104 additions & 0 deletions console/cypress/integration/data/functions/spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
import {
getElementFromAlias,
baseUrl,
// testCustomFunctionDefinition,
getCustomFunctionName,
getSchema,
testCustomFunctionSQL,
createTable,
dropTable,
} from '../../../helpers/dataHelpers';

import {
dropTableRequest,
dataRequest,
validateCFunc,
validateUntrackedFunc,
} from '../../validators/validators';

export const openRawSQL = () => {
// eslint-disable-line
// Open RawSQL
cy.get('a')
.contains('Data')
.click();
cy.wait(3000);
cy.get(getElementFromAlias('sql-link')).click();
cy.wait(3000);
// Match URL
cy.url().should('eq', `${baseUrl}/data/sql`);
};

export const createCustomFunctionSuccess = () => {
// cy.get('textarea').type(testCustomFunctionDefinition(1), { timeout: 10000, force: true});
// Round about way to create a function
dataRequest(createTable(1), 'success');
cy.wait(5000);
dataRequest(testCustomFunctionSQL(1), 'success');
cy.wait(5000);
// cy.get(getElementFromAlias('run-sql')).click();
// Check if the track checkbox is clicked or not
validateCFunc(getCustomFunctionName(1), getSchema(), 'success');
cy.wait(5000);
};

export const unTrackFunction = () => {
// Are you absolutely sure?\nThis action cannot be undone. This will permanently delete stitched GraphQL schema. Please type "DELETE" (in caps, without quotes) to confirm.\n
cy.visit(`data/schema/public/functions/${getCustomFunctionName(1)}/modify`);
cy.wait(5000);
cy.get(getElementFromAlias('custom-function-edit-untrack-btn')).click();
cy.wait(5000);
validateUntrackedFunc(getCustomFunctionName(1), getSchema(), 'success');
cy.wait(5000);
};

export const trackFunction = () => {
// Are you absolutely sure?\nThis action cannot be undone. This will permanently delete stitched GraphQL schema. Please type "DELETE" (in caps, without quotes) to confirm.\n
/*
cy.visit(
`data/schema/public/functions/${getCustomFunctionName(1)}/modify`,
);
*/
cy.get(
getElementFromAlias(`add-track-function-${getCustomFunctionName(1)}`)
).should('exist');
cy.get(
getElementFromAlias(`add-track-function-${getCustomFunctionName(1)}`)
).click();
cy.wait(5000);
validateCFunc(getCustomFunctionName(1), getSchema(), 'success');
cy.wait(5000);
};

export const verifyPermissionTab = () => {
// Are you absolutely sure?\nThis action cannot be undone. This will permanently delete stitched GraphQL schema. Please type "DELETE" (in caps, without quotes) to confirm.\n
cy.visit(
`data/schema/public/functions/${getCustomFunctionName(1)}/permissions`
);
cy.wait(5000);
cy.get(getElementFromAlias('custom-function-permission-btn')).should('exist');
cy.wait(5000);
};

export const deleteCustomFunction = () => {
// Are you absolutely sure?\nThis action cannot be undone. This will permanently delete stitched GraphQL schema. Please type "DELETE" (in caps, without quotes) to confirm.\n
cy.visit(`data/schema/public/functions/${getCustomFunctionName(1)}/modify`, {
onBeforeLoad(win) {
cy.stub(win, 'prompt').returns('DELETE');
},
});

cy.wait(5000);

cy.get(getElementFromAlias('custom-function-edit-delete-btn')).click();
cy.wait(5000);
cy.window()
.its('prompt')
.should('be.called');
cy.get(getElementFromAlias('delete-confirmation-error')).should('not.exist');
cy.url().should('eq', `${baseUrl}/data/schema/public`);
cy.wait(5000);

dropTableRequest(dropTable(1), 'success');
cy.wait(5000);
};
44 changes: 44 additions & 0 deletions console/cypress/integration/data/functions/test.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/* eslint no-unused-vars: 0 */
/* eslint import/prefer-default-export: 0 */
import { testMode } from '../../../helpers/common';
import { setMetaData } from '../../validators/validators';

import {
openRawSQL,
createCustomFunctionSuccess,
deleteCustomFunction,
unTrackFunction,
trackFunction,
verifyPermissionTab,
} from './spec';

const setup = () => {
describe('Setup route', () => {
it('Visit the index route', () => {
// Visit the index route
cy.visit('/data');
cy.wait(5000);
// Get and set validation metadata
setMetaData();
});
});
};

export const runCreateCustomFunctionsTableTests = () => {
describe('Create Custom Function', () => {
// it(
// 'Visit Run SQL page',
// openRawSQL,
// );
it('Create a custom function and track', createCustomFunctionSuccess);
it('Untrack custom function', unTrackFunction);
it('Track custom function', trackFunction);
it('Verify permission tab', verifyPermissionTab);
it('Delete custom function', deleteCustomFunction);
});
};

if (testMode !== 'cli') {
setup();
runCreateCustomFunctionsTableTests();
}
10 changes: 5 additions & 5 deletions console/cypress/integration/data/insert-browse/spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -438,27 +438,27 @@ export const checkViewRelationship = () => {
cy.get(getElementFromAlias('ref-table')).select(getTableName(0, testName));
cy.get(getElementFromAlias('ref-col')).select(getColName(0));
cy.get(getElementFromAlias('save-button')).click();
cy.wait(300);
cy.wait(1000);
// Add relationship
cy.get(getElementFromAlias('add-rel-mod')).click();
cy.get(getElementFromAlias('obj-rel-add-0')).click();
cy.get(getElementFromAlias('suggested-rel-name'))
.clear()
.type('someRel');
cy.get(getElementFromAlias('obj-rel-save-0')).click();
cy.wait(300);
cy.wait(2000);
// Insert a row
cy.get(getElementFromAlias('table-insert-rows')).click();
cy.get(getElementFromAlias('typed-input-1')).type('1');
cy.get(getElementFromAlias('insert-save-button')).click();
cy.wait(300);
cy.wait(1000);
cy.get(getElementFromAlias('table-browse-rows')).click();
cy.wait(300);
cy.wait(1000);
cy.get('a')
.contains('View')
.first()
.click();
cy.wait(300);
cy.wait(1000);
cy.get('a')
.contains('Close')
.first()
Expand Down
6 changes: 4 additions & 2 deletions console/cypress/integration/data/modify/spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,7 @@ export const passMTAddColumn = () => {
cy.get(getElementFromAlias('column-name')).type(getColName(0));
cy.get(getElementFromAlias('data-type')).select('integer');
cy.get(getElementFromAlias('add-column-button')).click();
cy.wait(2500);
cy.wait(5000);
// cy.get('.notification-success').click();
validateColumn(getTableName(0, testName), [getColName(0)], 'success');
};
Expand All @@ -121,6 +121,7 @@ export const passMCWithRightDefaultValue = () => {
.clear()
.type('1234');
cy.get(getElementFromAlias('save-button')).click();
cy.wait(15000);
};

export const passCreateForeignKey = () => {
Expand All @@ -129,11 +130,12 @@ export const passCreateForeignKey = () => {
cy.get(getElementFromAlias('ref-table')).select(getTableName(0, testName));
cy.get(getElementFromAlias('ref-col')).select(getColName(0));
cy.get(getElementFromAlias('save-button')).click();
cy.wait(500);
cy.wait(15000);
};

export const passRemoveForeignKey = () => {
cy.get(getElementFromAlias('remove-constraint-button')).click();
cy.wait(10000);
};

export const passMTDeleteCol = () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ export const createSimpleRemoteSchema = () => {
.clear()
.type(getRemoteGraphQLURL());
cy.get(getElementFromAlias('add-remote-schema-submit')).click();
cy.wait(10000);
cy.wait(15000);
validateRS(getRemoteSchemaName(1, testName), 'success');
cy.url().should(
'eq',
Expand Down Expand Up @@ -242,7 +242,7 @@ export const passWithEditRemoteSchema = () => {
.type(getRemoteSchemaName(5, testName));

cy.get(getElementFromAlias('remote-schema-edit-save-btn')).click();
cy.wait(5000);
cy.wait(10000);
validateRS(getRemoteSchemaName(5, testName), 'success');

cy.get(getElementFromAlias('remote-schemas-modify')).click();
Expand All @@ -252,7 +252,7 @@ export const passWithEditRemoteSchema = () => {
getRemoteSchemaName(5, testName)
);
cy.get(getElementFromAlias('remote-schema-edit-modify-btn')).should('exist');
cy.wait(5000);
cy.wait(7000);
};

export const deleteRemoteSchema = () => {
Expand Down
Loading