@@ -3,17 +3,18 @@ import Decimal from 'decimal.js';
33import type { AliasableExpression , TableExpression } from 'kysely' ;
44import {
55 expressionBuilder ,
6+ ExpressionWrapper ,
67 sql ,
8+ ValueListNode ,
79 type Expression ,
8- type ExpressionWrapper ,
910 type SelectQueryBuilder ,
1011 type SqlBool ,
1112} from 'kysely' ;
1213import { match } from 'ts-pattern' ;
1314import { AnyNullClass , DbNullClass , JsonNullClass } from '../../../common-types' ;
1415import type { BuiltinType , FieldDef , SchemaDef } from '../../../schema' ;
1516import type { SortOrder } from '../../crud-types' ;
16- import { createInternalError , createInvalidInputError , createNotSupportedError } from '../../errors' ;
17+ import { createInvalidInputError , createNotSupportedError } from '../../errors' ;
1718import type { ClientOptions } from '../../options' ;
1819import { isTypeDef } from '../../query-utils' ;
1920import { LateralJoinDialectBase } from './lateral-join-dialect-base' ;
@@ -223,8 +224,29 @@ export class MySqlCrudDialect<Schema extends SchemaDef> extends LateralJoinDiale
223224 return this . eb . fn ( 'JSON_LENGTH' , [ array ] ) ;
224225 }
225226
226- override buildArrayLiteralSQL ( _values : unknown [ ] ) : AliasableExpression < number > {
227- throw new Error ( 'MySQL does not support array literals' ) ;
227+ override buildArrayValue ( values : Expression < unknown > [ ] , _elemType : string ) : AliasableExpression < unknown > {
228+ return new ExpressionWrapper ( ValueListNode . create ( values . map ( ( v ) => v . toOperationNode ( ) ) ) ) ;
229+ }
230+
231+ override buildArrayContains (
232+ _field : Expression < unknown > ,
233+ _value : Expression < unknown > ,
234+ ) : AliasableExpression < SqlBool > {
235+ throw createNotSupportedError ( 'MySQL does not support native array operations' ) ;
236+ }
237+
238+ override buildArrayHasEvery (
239+ _field : Expression < unknown > ,
240+ _values : Expression < unknown > ,
241+ ) : AliasableExpression < SqlBool > {
242+ throw createNotSupportedError ( 'MySQL does not support native array operations' ) ;
243+ }
244+
245+ override buildArrayHasSome (
246+ _field : Expression < unknown > ,
247+ _values : Expression < unknown > ,
248+ ) : AliasableExpression < SqlBool > {
249+ throw createNotSupportedError ( 'MySQL does not support native array operations' ) ;
228250 }
229251
230252 protected override buildJsonEqualityFilter (
@@ -288,40 +310,6 @@ export class MySqlCrudDialect<Schema extends SchemaDef> extends LateralJoinDiale
288310 ) ;
289311 }
290312
291- override getFieldSqlType ( fieldDef : FieldDef ) {
292- // TODO: respect `@db.x` attributes
293- if ( fieldDef . relation ) {
294- throw createInternalError ( 'Cannot get SQL type of a relation field' ) ;
295- }
296-
297- let result : string ;
298-
299- if ( this . schema . enums ?. [ fieldDef . type ] ) {
300- // enums are treated as text/varchar
301- result = 'varchar(255)' ;
302- } else {
303- result = match ( fieldDef . type )
304- . with ( 'String' , ( ) => 'varchar(255)' )
305- . with ( 'Boolean' , ( ) => 'tinyint(1)' ) // MySQL uses tinyint(1) for boolean
306- . with ( 'Int' , ( ) => 'int' )
307- . with ( 'BigInt' , ( ) => 'bigint' )
308- . with ( 'Float' , ( ) => 'double' )
309- . with ( 'Decimal' , ( ) => 'decimal' )
310- . with ( 'DateTime' , ( ) => 'datetime' )
311- . with ( 'Bytes' , ( ) => 'blob' )
312- . with ( 'Json' , ( ) => 'json' )
313- // fallback to text
314- . otherwise ( ( ) => 'text' ) ;
315- }
316-
317- if ( fieldDef . array ) {
318- // MySQL stores arrays as JSON
319- result = 'json' ;
320- }
321-
322- return result ;
323- }
324-
325313 override getStringCasingBehavior ( ) {
326314 // MySQL LIKE is case-insensitive by default (depends on collation), no ILIKE support
327315 return { supportsILike : false , likeCaseSensitive : false } ;
0 commit comments