@@ -50,8 +50,14 @@ export function generateOrmReadme(
5050 lines . push ( '|-------|------------|' ) ;
5151 for ( const table of tables ) {
5252 const { singularName } = getTableNames ( table ) ;
53+ const bulkOps : string [ ] = [ ] ;
54+ if ( table . query ?. bulkInsert ) bulkOps . push ( 'bulkCreate' ) ;
55+ if ( table . query ?. bulkUpsert ) bulkOps . push ( 'bulkUpsert' ) ;
56+ if ( table . query ?. bulkUpdate ) bulkOps . push ( 'bulkUpdate' ) ;
57+ if ( table . query ?. bulkDelete ) bulkOps . push ( 'bulkDelete' ) ;
58+ const ops = [ 'findMany' , 'findOne' , 'create' , 'update' , 'delete' , ...bulkOps ] . join ( ', ' ) ;
5359 lines . push (
54- `| \`${ singularName } \` | findMany, findOne, create, update, delete |` ,
60+ `| \`${ singularName } \` | ${ ops } |` ,
5561 ) ;
5662 }
5763 lines . push ( '' ) ;
@@ -108,6 +114,34 @@ export function generateOrmReadme(
108114 lines . push (
109115 `const deleted = await db.${ singularName } .delete({ where: { ${ pk . name } : ${ pkPlaceholder ( pk ) } } }).execute();` ,
110116 ) ;
117+ if ( table . query ?. bulkInsert ) {
118+ lines . push ( '' ) ;
119+ lines . push ( `// Bulk Create` ) ;
120+ lines . push (
121+ `const bulkCreated = await db.${ singularName } .bulkCreate({ data: [{ ${ editableFields . map ( ( f ) => `${ f . name } : ${ fieldPlaceholder ( f ) } ` ) . join ( ', ' ) } }], select: { ${ pk . name } : true } }).execute();` ,
122+ ) ;
123+ }
124+ if ( table . query ?. bulkUpsert ) {
125+ lines . push ( '' ) ;
126+ lines . push ( `// Bulk Upsert` ) ;
127+ lines . push (
128+ `const bulkUpserted = await db.${ singularName } .bulkUpsert({ data: [{ ${ editableFields . map ( ( f ) => `${ f . name } : ${ fieldPlaceholder ( f ) } ` ) . join ( ', ' ) } }], onConflict: { constraint: 'PRIMARY_KEY', action: 'UPDATE' }, select: { ${ pk . name } : true } }).execute();` ,
129+ ) ;
130+ }
131+ if ( table . query ?. bulkUpdate ) {
132+ lines . push ( '' ) ;
133+ lines . push ( `// Bulk Update` ) ;
134+ lines . push (
135+ `const bulkUpdated = await db.${ singularName } .bulkUpdate({ where: { ${ editableFields [ 0 ] ?. name || 'field' } : { equalTo: ${ editableFields [ 0 ] ? fieldPlaceholder ( editableFields [ 0 ] ) : "'<String>'" } } }, data: { ${ editableFields [ 0 ] ?. name || 'field' } : ${ editableFields [ 0 ] ? fieldPlaceholder ( editableFields [ 0 ] ) : "'<String>'" } }, select: { ${ pk . name } : true } }).execute();` ,
136+ ) ;
137+ }
138+ if ( table . query ?. bulkDelete ) {
139+ lines . push ( '' ) ;
140+ lines . push ( `// Bulk Delete` ) ;
141+ lines . push (
142+ `const bulkDeleted = await db.${ singularName } .bulkDelete({ where: { ${ pk . name } : { equalTo: ${ pkPlaceholder ( pk ) } } } }).execute();` ,
143+ ) ;
144+ }
111145 lines . push ( '```' ) ;
112146 lines . push ( '' ) ;
113147 const ormSpecialGroups = categorizeSpecialFields ( table ) ;
@@ -227,6 +261,7 @@ export function generateOrmAgentsDocs(
227261 lines . push ( '' ) ;
228262 lines . push ( '- Access models via `db.<ModelName>` (e.g. `db.User`)' ) ;
229263 lines . push ( '- CRUD methods: `findMany`, `findOne`, `create`, `update`, `delete`' ) ;
264+ lines . push ( '- Bulk methods (when enabled via smart tags): `bulkCreate`, `bulkUpsert`, `bulkUpdate`, `bulkDelete`' ) ;
230265 lines . push ( '- Chain `.execute().unwrap()` to run and throw on error, or `.execute()` alone for discriminated union result' ) ;
231266 lines . push ( '- Custom operations via `db.query.<name>` or `db.mutation.<name>`' ) ;
232267 lines . push ( '' ) ;
@@ -269,6 +304,20 @@ export function generateOrmSkills(
269304 ormSkillSpecialGroups . map ( ( g ) => `**${ g . label } :** ${ g . fields . map ( ( f ) => `\`${ f . name } \`` ) . join ( ', ' ) } \n${ g . description } ` ) . join ( '\n\n' )
270305 : ormSkillBaseDesc ;
271306
307+ const bulkUsageLines : string [ ] = [ ] ;
308+ if ( table . query ?. bulkInsert ) {
309+ bulkUsageLines . push ( `db.${ modelName } .bulkCreate({ data: [...], select: { id: true } }).execute()` ) ;
310+ }
311+ if ( table . query ?. bulkUpsert ) {
312+ bulkUsageLines . push ( `db.${ modelName } .bulkUpsert({ data: [...], onConflict: { constraint: '...', action: 'UPDATE' }, select: { id: true } }).execute()` ) ;
313+ }
314+ if ( table . query ?. bulkUpdate ) {
315+ bulkUsageLines . push ( `db.${ modelName } .bulkUpdate({ where: {...}, data: {...}, select: { id: true } }).execute()` ) ;
316+ }
317+ if ( table . query ?. bulkDelete ) {
318+ bulkUsageLines . push ( `db.${ modelName } .bulkDelete({ where: {...} }).execute()` ) ;
319+ }
320+
272321 files . push ( {
273322 fileName : `${ skillName } /references/${ refName } .md` ,
274323 content : buildSkillReference ( {
@@ -281,6 +330,7 @@ export function generateOrmSkills(
281330 `db.${ modelName } .create({ data: { ${ editableFields . map ( ( f ) => `${ f . name } : ${ fieldPlaceholder ( f ) } ` ) . join ( ', ' ) } }, select: { id: true } }).execute()` ,
282331 `db.${ modelName } .update({ where: { ${ pk . name } : ${ pkPlaceholder ( pk ) } }, data: { ${ editableFields [ 0 ] ?. name || 'field' } : ${ editableFields [ 0 ] ? fieldPlaceholder ( editableFields [ 0 ] ) : "'<String>'" } }, select: { id: true } }).execute()` ,
283332 `db.${ modelName } .delete({ where: { ${ pk . name } : ${ pkPlaceholder ( pk ) } } }).execute()` ,
333+ ...bulkUsageLines ,
284334 ] ,
285335 examples : [
286336 {
@@ -335,6 +385,7 @@ export function generateOrmSkills(
335385
336386 // Generate the overview SKILL.md
337387 const tableNames = tables . map ( ( t ) => lcFirst ( getTableNames ( t ) . singularName ) ) ;
388+ const hasBulkTables = tables . some ( ( t ) => t . query ?. bulkInsert || t . query ?. bulkUpsert || t . query ?. bulkUpdate || t . query ?. bulkDelete ) ;
338389 files . push ( {
339390 fileName : `${ skillName } /SKILL.md` ,
340391 content : buildSkillFile (
@@ -352,6 +403,14 @@ export function generateOrmSkills(
352403 `db.<model>.create({ data: { ... }, select: { id: true } }).execute()` ,
353404 `db.<model>.update({ where: { id: '<UUID>' }, data: { ... }, select: { id: true } }).execute()` ,
354405 `db.<model>.delete({ where: { id: '<UUID>' } }).execute()` ,
406+ ...( hasBulkTables ? [
407+ '' ,
408+ `// Bulk operations (on tables with @behavior +bulkInsert/+bulkUpsert/+bulkUpdate/+bulkDelete)` ,
409+ `db.<model>.bulkCreate({ data: [...], select: { id: true } }).execute()` ,
410+ `db.<model>.bulkUpsert({ data: [...], onConflict: { constraint: '...', action: 'UPDATE' }, select: { id: true } }).execute()` ,
411+ `db.<model>.bulkUpdate({ where: {...}, data: {...}, select: { id: true } }).execute()` ,
412+ `db.<model>.bulkDelete({ where: {...} }).execute()` ,
413+ ] : [ ] ) ,
355414 ] ,
356415 examples : [
357416 {
0 commit comments