Skip to content

Commit

Permalink
checkpoint, fix syntax err, diff not dropping indexes
Browse files Browse the repository at this point in the history
  • Loading branch information
mitchwadair committed Mar 4, 2025
1 parent e00f908 commit aed4387
Show file tree
Hide file tree
Showing 3 changed files with 89 additions and 9 deletions.
4 changes: 1 addition & 3 deletions drizzle-kit/src/serializer/singlestoreSchema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -119,7 +119,6 @@ const tableSquashed = object({
name: string(),
columns: record(string(), column),
indexes: record(string(), string()),
vectorIndexes: record(string(), string()),
compositePrimaryKeys: record(string(), string()),
uniqueConstraints: record(string(), string()).default({}),
}).strict();
Expand Down Expand Up @@ -249,8 +248,7 @@ export const squashSingleStoreScheme = (json: SingleStoreSchema): SingleStoreSch
{
name: it[1].name,
columns: it[1].columns,
indexes: squashedIndexes,
vectorIndexes: squashedVectorIndexes,
indexes: { ...squashedIndexes, ...squashedVectorIndexes },
compositePrimaryKeys: squashedPKs,
uniqueConstraints: squashedUniqueConstraints,
},
Expand Down
2 changes: 1 addition & 1 deletion drizzle-kit/src/sqlgenerator.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3542,7 +3542,7 @@ export class CreateSingleStoreIndexConvertor extends Convertor {
}
const indexOptionsString = JSON.stringify(indexOptions);

return `ALTER TABLE \`${statement.tableName}\` ADD VECTOR INDEX \`${name}\` (${columnString}) '${indexOptionsString}';`;
return `ALTER TABLE \`${statement.tableName}\` ADD VECTOR INDEX \`${name}\` (${columnString}) INDEX_OPTIONS '${indexOptionsString}';`;
}
}
}
Expand Down
92 changes: 87 additions & 5 deletions drizzle-kit/tests/push/singlestore.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ import {
vector,
year,
} from 'drizzle-orm/singlestore-core';
import { vectorIndex } from 'drizzle-orm/singlestore-core/indexes/vector';
import getPort from 'get-port';
import { Connection, createConnection } from 'mysql2/promise';
import { diffTestSchemasPushSingleStore, diffTestSchemasSingleStore } from 'tests/schemaDiffer';
Expand Down Expand Up @@ -264,7 +265,6 @@ const singlestoreSuite: DialectSuite = {
'drizzle',
false,
);
console.log(statements);
expect(statements.length).toBe(0);
expect(statements).toEqual([]);

Expand All @@ -279,14 +279,96 @@ const singlestoreSuite: DialectSuite = {
await context.client.query(st);
}
},
addBasicIndexes: function(context?: any): Promise<void> {
return {} as any;
addBasicIndexes: async function(context?: any): Promise<void> {
const schema1 = {
vectorIndex: singlestoreTable('vector_table', {
v: vector('v', { dimensions: 10 }),
}),
};

const schema2 = {
vectorIndex: singlestoreTable('vector_table', {
v: vector('v', { dimensions: 10 }),
}, (table) => [
vectorIndex('vector_index').on(table.v),
]),
};

const { statements, sqlStatements } = await diffTestSchemasPushSingleStore(
context.client as Connection,
schema1,
schema2,
[],
'drizzle',
false,
);
expect(statements.length).toBe(1);
expect(statements[0]).toStrictEqual({
schema: '',
tableName: 'vector_table',
type: 'create_vector_index',
data: 'vector_index;v;AUTO;;;;;;;;',
internal: {
tables: {},
indexes: {},
},
});
expect(sqlStatements.length).toBe(1);
expect(sqlStatements[0]).toBe(
`ALTER TABLE \`vector_table\` ADD VECTOR INDEX \`vector_index\` (\`v\`) INDEX_OPTIONS '{"index_type":"AUTO"}';`,
);

const { sqlStatements: dropStatements } = await diffTestSchemasSingleStore(
schema2,
{},
[],
false,
);

for (const st of dropStatements) {
await context.client.query(st);
}
},
changeIndexFields: function(context?: any): Promise<void> {
return {} as any;
},
dropIndex: function(context?: any): Promise<void> {
return {} as any;
dropIndex: async function(context?: any): Promise<void> {
const schema1 = {
vectorIndex: singlestoreTable('vector_table', {
v: vector('v', { dimensions: 10 }),
}, (table) => [
vectorIndex('vector_index').on(table.v),
]),
};

const schema2 = {
vectorIndex: singlestoreTable('vector_table', {
v: vector('v', { dimensions: 10 }),
}),
};

const { statements, sqlStatements } = await diffTestSchemasPushSingleStore(
context.client as Connection,
schema1,
schema2,
[],
'drizzle',
false,
);
console.log(statements);
console.log(sqlStatements);
expect(statements.length).toBe(1);

const { sqlStatements: dropStatements } = await diffTestSchemasSingleStore(
schema2,
{},
[],
false,
);

for (const st of dropStatements) {
await context.client.query(st);
}
},
indexesToBeNotTriggered: function(context?: any): Promise<void> {
return {} as any;
Expand Down

0 comments on commit aed4387

Please sign in to comment.