diff --git a/packages/cubejs-schema-compiler/extensions/Funnels.js b/packages/cubejs-schema-compiler/extensions/Funnels.js index 720167161113f..0a95c3021e2b6 100644 --- a/packages/cubejs-schema-compiler/extensions/Funnels.js +++ b/packages/cubejs-schema-compiler/extensions/Funnels.js @@ -99,11 +99,15 @@ ${eventJoin.join("\nLEFT JOIN\n")} } eventsTableName(step) { - return `${inflection.underscore(step.name)}_events`; + return `${this.inflect(step)}_events`; } stepUserIdColumnName(step) { - return `${inflection.underscore(step.name)}_user_id`; + return `${this.inflect(step)}_user_id`; + } + + inflect(step) { + return inflection.underscore(inflection.camelize(step.name.replace(/[^A-Za-z0-9]+/g, '_'))); } stepSegmentSelect(funnelDefinition, step) { diff --git a/packages/cubejs-schema-compiler/scaffolding/ScaffoldingTemplate.js b/packages/cubejs-schema-compiler/scaffolding/ScaffoldingTemplate.js index 8532ea63f275c..ab80b32f1b31e 100644 --- a/packages/cubejs-schema-compiler/scaffolding/ScaffoldingTemplate.js +++ b/packages/cubejs-schema-compiler/scaffolding/ScaffoldingTemplate.js @@ -92,7 +92,7 @@ class ScaffoldingTemplate { } memberName(member) { - return inflection.camelize(member.title.replace(/\s+|\./g, '_').toLowerCase(), true); + return inflection.camelize(member.title.replace(/[^A-Za-z0-9]+/g, '_').toLowerCase(), true); } renderFile(fileDescriptor) { diff --git a/packages/cubejs-schema-compiler/test/ExtensionsTest.js b/packages/cubejs-schema-compiler/test/ExtensionsTest.js index 9f4edce513b93..fa31fb436cff5 100644 --- a/packages/cubejs-schema-compiler/test/ExtensionsTest.js +++ b/packages/cubejs-schema-compiler/test/ExtensionsTest.js @@ -23,13 +23,13 @@ describe('Extensions', () => { }, steps: [ { - name: 'application_installed', + name: 'Application Installed', eventsTable: { sql: 'application_installed' } }, { - name: 'application_opened', + name: 'ApplicationOpened', eventsView: { sql: 'application_opened' }, @@ -79,6 +79,10 @@ describe('Extensions', () => { }); console.log(query.buildSqlAndParams()[0]); + + query.buildSqlAndParams()[0].should.match(/application_installed_events/); + query.buildSqlAndParams()[0].should.match(/application_opened_events/); + query.buildSqlAndParams()[0].should.match(/user_training_finish_first_events/); }); return result;