Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Extend SingleStoreDB support #531

Merged
merged 4 commits into from Nov 22, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
19 changes: 18 additions & 1 deletion src/languages/singlestoredb/singlestoredb.formatter.ts
Expand Up @@ -254,10 +254,27 @@ export const singlestoredb: DialectOptions = {
{ quote: '``', prefixes: ['@'], requirePrefix: true },
],
lineCommentTypes: ['--', '#'],
operators: [':=', '&', '|', '^', '~', '<<', '>>', '<=>', '&&', '||'],
operators: [
':=',
'&',
'|',
'^',
'~',
'<<',
'>>',
'<=>',
'&&',
'||',
'::',
'::$',
'::%',
':>',
'!:>',
],
postProcess,
},
formatOptions: {
alwaysDenseOperators: ['::', '::$', '::%'],
onelineClauses,
},
};
Expand Down
57 changes: 57 additions & 0 deletions test/singlestoredb.test.ts
@@ -1,3 +1,4 @@
import dedent from 'dedent-js';
import { format as originalFormat, FormatFn } from '../src/sqlFormatter.js';
import behavesLikeMariaDbFormatter from './behavesLikeMariaDbFormatter.js';

Expand All @@ -9,6 +10,7 @@ import supportsCreateTable from './features/createTable.js';
import supportsCreateView from './features/createView.js';
import supportsAlterTable from './features/alterTable.js';
import supportsStrings from './features/strings.js';
import supportsBetween from './features/between.js';

describe('SingleStoreDbFormatter', () => {
const language = 'singlestoredb';
Expand Down Expand Up @@ -39,10 +41,65 @@ describe('SingleStoreDbFormatter', () => {
supportsLimiting(format, { limit: true, offset: true });
supportsCreateTable(format, { ifNotExists: true });
supportsCreateView(format);
supportsBetween(format);
supportsAlterTable(format, {
addColumn: true,
dropColumn: true,
modify: true,
renameTo: true,
});
describe(`formats traversal of semi structured data`, () => {
it(`formats '.' path-operator without spaces`, () => {
expect(format(`SELECT TO_JSON(foo.*) AS foo_json FROM foo`)).toBe(dedent`
SELECT
TO_JSON(foo.*) AS foo_json
FROM
foo
`);
});
it(`formats '::' path-operator without spaces`, () => {
expect(format(`SELECT * FROM foo WHERE json_foo::bar = 'foobar'`)).toBe(dedent`
SELECT
*
FROM
foo
WHERE
json_foo::bar = 'foobar'
`);
});
it(`formats '::$' conversion path-operator without spaces`, () => {
expect(format(`SELECT * FROM foo WHERE json_foo::$bar = 'foobar'`)).toBe(dedent`
SELECT
*
FROM
foo
WHERE
json_foo::$bar = 'foobar'
`);
});
it(`formats '::%' conversion path-operator without spaces`, () => {
expect(format(`SELECT * FROM foo WHERE json_foo::%bar = 'foobar'`)).toBe(dedent`
SELECT
*
FROM
foo
WHERE
json_foo::%bar = 'foobar'
`);
});
});
describe(`formats custom type-cast operators`, () => {
it(`formats ':>' type-cast operator`, () => {
expect(format(`SELECT 1 :> DOUBLE AS foo`)).toBe(dedent`
SELECT
1 :> DOUBLE AS foo
`);
});
it(`formats '!:>' type-cast operator`, () => {
expect(format(`SELECT 1 !:> DOUBLE AS foo`)).toBe(dedent`
SELECT
1 !:> DOUBLE AS foo
`);
});
});
});