diff --git a/src/i18n/locales/ar.ts b/src/i18n/locales/ar.ts index da16cbaa..b5ed5acd 100644 --- a/src/i18n/locales/ar.ts +++ b/src/i18n/locales/ar.ts @@ -143,6 +143,7 @@ export const ar: LanguageTranslation = { field_actions: { title: 'خصائص الحقل', unique: 'فريد', + auto_increment: 'زيادة تلقائية', comments: 'تعليقات', no_comments: 'لا يوجد تعليقات', delete_field: 'حذف الحقل', diff --git a/src/i18n/locales/bn.ts b/src/i18n/locales/bn.ts index e1e59983..e85ebc67 100644 --- a/src/i18n/locales/bn.ts +++ b/src/i18n/locales/bn.ts @@ -144,6 +144,7 @@ export const bn: LanguageTranslation = { field_actions: { title: 'ফিল্ড কর্ম', unique: 'অদ্বিতীয়', + auto_increment: 'স্বয়ংক্রিয় বৃদ্ধি', comments: 'মন্তব্য', no_comments: 'কোনো মন্তব্য নেই', delete_field: 'ফিল্ড মুছুন', diff --git a/src/i18n/locales/de.ts b/src/i18n/locales/de.ts index 977d0b26..97ee6fd4 100644 --- a/src/i18n/locales/de.ts +++ b/src/i18n/locales/de.ts @@ -145,6 +145,7 @@ export const de: LanguageTranslation = { field_actions: { title: 'Feldattribute', unique: 'Eindeutig', + auto_increment: 'Automatisch hochzählen', comments: 'Kommentare', no_comments: 'Keine Kommentare', delete_field: 'Feld löschen', diff --git a/src/i18n/locales/en.ts b/src/i18n/locales/en.ts index 9d7f9939..68f6e008 100644 --- a/src/i18n/locales/en.ts +++ b/src/i18n/locales/en.ts @@ -140,6 +140,7 @@ export const en = { field_actions: { title: 'Field Attributes', unique: 'Unique', + auto_increment: 'Auto Increment', character_length: 'Max Length', precision: 'Precision', scale: 'Scale', diff --git a/src/i18n/locales/es.ts b/src/i18n/locales/es.ts index e8706ac6..b999eee1 100644 --- a/src/i18n/locales/es.ts +++ b/src/i18n/locales/es.ts @@ -143,6 +143,7 @@ export const es: LanguageTranslation = { field_actions: { title: 'Atributos del Campo', unique: 'Único', + auto_increment: 'Autoincremento', comments: 'Comentarios', no_comments: 'Sin comentarios', delete_field: 'Eliminar Campo', diff --git a/src/i18n/locales/fr.ts b/src/i18n/locales/fr.ts index 4a6a0a1a..a05f9386 100644 --- a/src/i18n/locales/fr.ts +++ b/src/i18n/locales/fr.ts @@ -141,6 +141,7 @@ export const fr: LanguageTranslation = { field_actions: { title: 'Attributs du Champ', unique: 'Unique', + auto_increment: 'Auto-incrément', comments: 'Commentaires', no_comments: 'Pas de commentaires', delete_field: 'Supprimer le Champ', diff --git a/src/i18n/locales/gu.ts b/src/i18n/locales/gu.ts index 5d3aba5e..4cc016ab 100644 --- a/src/i18n/locales/gu.ts +++ b/src/i18n/locales/gu.ts @@ -145,6 +145,7 @@ export const gu: LanguageTranslation = { field_actions: { title: 'ફીલ્ડ લક્ષણો', unique: 'અદ્વિતીય', + auto_increment: 'ઑટો ઇન્ક્રિમેન્ટ', comments: 'ટિપ્પણીઓ', no_comments: 'કોઈ ટિપ્પણીઓ નથી', delete_field: 'ફીલ્ડ કાઢી નાખો', diff --git a/src/i18n/locales/hi.ts b/src/i18n/locales/hi.ts index 65227a52..361c2df8 100644 --- a/src/i18n/locales/hi.ts +++ b/src/i18n/locales/hi.ts @@ -144,6 +144,7 @@ export const hi: LanguageTranslation = { field_actions: { title: 'फ़ील्ड विशेषताएँ', unique: 'अद्वितीय', + auto_increment: 'ऑटो इंक्रीमेंट', comments: 'टिप्पणियाँ', no_comments: 'कोई टिप्पणी नहीं', delete_field: 'फ़ील्ड हटाएँ', diff --git a/src/i18n/locales/hr.ts b/src/i18n/locales/hr.ts index ca76d6ee..43131b88 100644 --- a/src/i18n/locales/hr.ts +++ b/src/i18n/locales/hr.ts @@ -141,6 +141,7 @@ export const hr: LanguageTranslation = { field_actions: { title: 'Atributi polja', unique: 'Jedinstven', + auto_increment: 'Automatsko povećavanje', character_length: 'Maksimalna dužina', precision: 'Preciznost', scale: 'Skala', diff --git a/src/i18n/locales/id_ID.ts b/src/i18n/locales/id_ID.ts index 91de48af..4de7698c 100644 --- a/src/i18n/locales/id_ID.ts +++ b/src/i18n/locales/id_ID.ts @@ -143,6 +143,7 @@ export const id_ID: LanguageTranslation = { field_actions: { title: 'Atribut Kolom', unique: 'Unik', + auto_increment: 'Kenaikan Otomatis', comments: 'Komentar', no_comments: 'Tidak ada komentar', delete_field: 'Hapus Kolom', diff --git a/src/i18n/locales/ja.ts b/src/i18n/locales/ja.ts index 5a761240..4f9ec8f9 100644 --- a/src/i18n/locales/ja.ts +++ b/src/i18n/locales/ja.ts @@ -147,6 +147,7 @@ export const ja: LanguageTranslation = { field_actions: { title: 'フィールド属性', unique: 'ユニーク', + auto_increment: 'オートインクリメント', comments: 'コメント', no_comments: 'コメントがありません', delete_field: 'フィールドを削除', diff --git a/src/i18n/locales/ko_KR.ts b/src/i18n/locales/ko_KR.ts index a90746e1..1d57ddaf 100644 --- a/src/i18n/locales/ko_KR.ts +++ b/src/i18n/locales/ko_KR.ts @@ -143,6 +143,7 @@ export const ko_KR: LanguageTranslation = { field_actions: { title: '필드 속성', unique: '유니크 여부', + auto_increment: '자동 증가', comments: '주석', no_comments: '주석 없음', delete_field: '필드 삭제', diff --git a/src/i18n/locales/mr.ts b/src/i18n/locales/mr.ts index 428118f2..5dff5824 100644 --- a/src/i18n/locales/mr.ts +++ b/src/i18n/locales/mr.ts @@ -146,6 +146,7 @@ export const mr: LanguageTranslation = { field_actions: { title: 'फील्ड गुणधर्म', unique: 'युनिक', + auto_increment: 'ऑटो इंक्रिमेंट', comments: 'टिप्पण्या', no_comments: 'कोणत्याही टिप्पणी नाहीत', delete_field: 'फील्ड हटवा', diff --git a/src/i18n/locales/ne.ts b/src/i18n/locales/ne.ts index 431d2873..fdf0b2f6 100644 --- a/src/i18n/locales/ne.ts +++ b/src/i18n/locales/ne.ts @@ -144,6 +144,7 @@ export const ne: LanguageTranslation = { field_actions: { title: 'क्षेत्र विशेषताहरू', unique: 'अनन्य', + auto_increment: 'स्वचालित वृद्धि', comments: 'टिप्पणीहरू', no_comments: 'कुनै टिप्पणीहरू छैनन्', delete_field: 'क्षेत्र हटाउनुहोस्', diff --git a/src/i18n/locales/pt_BR.ts b/src/i18n/locales/pt_BR.ts index 2f09733e..dd812397 100644 --- a/src/i18n/locales/pt_BR.ts +++ b/src/i18n/locales/pt_BR.ts @@ -144,6 +144,7 @@ export const pt_BR: LanguageTranslation = { field_actions: { title: 'Atributos do Campo', unique: 'Único', + auto_increment: 'Incremento Automático', comments: 'Comentários', no_comments: 'Sem comentários', delete_field: 'Excluir Campo', diff --git a/src/i18n/locales/ru.ts b/src/i18n/locales/ru.ts index 7c9e3a59..5faa4e39 100644 --- a/src/i18n/locales/ru.ts +++ b/src/i18n/locales/ru.ts @@ -141,6 +141,7 @@ export const ru: LanguageTranslation = { field_actions: { title: 'Атрибуты поля', unique: 'Уникальный', + auto_increment: 'Автоинкремент', comments: 'Комментарии', no_comments: 'Нет комментария', delete_field: 'Удалить поле', diff --git a/src/i18n/locales/te.ts b/src/i18n/locales/te.ts index cb74e1fb..6f288000 100644 --- a/src/i18n/locales/te.ts +++ b/src/i18n/locales/te.ts @@ -144,6 +144,7 @@ export const te: LanguageTranslation = { field_actions: { title: 'ఫీల్డ్ గుణాలు', unique: 'అద్వితీయ', + auto_increment: 'ఆటో ఇంక్రిమెంట్', comments: 'వ్యాఖ్యలు', no_comments: 'వ్యాఖ్యలు లేవు', delete_field: 'ఫీల్డ్ తొలగించు', diff --git a/src/i18n/locales/tr.ts b/src/i18n/locales/tr.ts index 13ffc4ab..47127270 100644 --- a/src/i18n/locales/tr.ts +++ b/src/i18n/locales/tr.ts @@ -143,6 +143,7 @@ export const tr: LanguageTranslation = { field_actions: { title: 'Alan Özellikleri', unique: 'Tekil', + auto_increment: 'Otomatik Artış', comments: 'Yorumlar', no_comments: 'Yorum yok', delete_field: 'Alanı Sil', diff --git a/src/i18n/locales/uk.ts b/src/i18n/locales/uk.ts index c86bf5f8..f55c7bbb 100644 --- a/src/i18n/locales/uk.ts +++ b/src/i18n/locales/uk.ts @@ -142,6 +142,7 @@ export const uk: LanguageTranslation = { field_actions: { title: 'Атрибути полів', unique: 'Унікальне', + auto_increment: 'Автоінкремент', comments: 'Коментарі', no_comments: 'Немає коментарів', delete_field: 'Видалити поле', diff --git a/src/i18n/locales/vi.ts b/src/i18n/locales/vi.ts index 84b18da7..c048deb6 100644 --- a/src/i18n/locales/vi.ts +++ b/src/i18n/locales/vi.ts @@ -143,6 +143,7 @@ export const vi: LanguageTranslation = { field_actions: { title: 'Thuộc tính trường', unique: 'Giá trị duy nhất', + auto_increment: 'Tự động tăng', comments: 'Bình luận', no_comments: 'Không có bình luận', delete_field: 'Xóa trường', diff --git a/src/i18n/locales/zh_CN.ts b/src/i18n/locales/zh_CN.ts index 7060b9c1..dd18798f 100644 --- a/src/i18n/locales/zh_CN.ts +++ b/src/i18n/locales/zh_CN.ts @@ -140,6 +140,7 @@ export const zh_CN: LanguageTranslation = { field_actions: { title: '字段属性', unique: '唯一', + auto_increment: '自动递增', comments: '注释', no_comments: '空', delete_field: '删除字段', diff --git a/src/i18n/locales/zh_TW.ts b/src/i18n/locales/zh_TW.ts index b9f7f37a..41bbf629 100644 --- a/src/i18n/locales/zh_TW.ts +++ b/src/i18n/locales/zh_TW.ts @@ -140,6 +140,7 @@ export const zh_TW: LanguageTranslation = { field_actions: { title: '欄位屬性', unique: '唯一', + auto_increment: '自動遞增', comments: '註解', no_comments: '無註解', delete_field: '刪除欄位', diff --git a/src/lib/data/data-types/data-types.ts b/src/lib/data/data-types/data-types.ts index fde40473..e8cd17fa 100644 --- a/src/lib/data/data-types/data-types.ts +++ b/src/lib/data/data-types/data-types.ts @@ -146,3 +146,22 @@ export const findDataTypeDataById = ( return dataTypesOptions.find((dataType) => dataType.id === id); }; + +export const supportsAutoIncrementDataType = ( + dataTypeName: string +): boolean => { + return [ + 'integer', + 'int', + 'bigint', + 'smallint', + 'tinyint', + 'mediumint', + 'serial', + 'bigserial', + 'smallserial', + 'number', + 'numeric', + 'decimal', + ].includes(dataTypeName.toLocaleLowerCase()); +}; diff --git a/src/lib/data/export-metadata/export-per-type/mssql.ts b/src/lib/data/export-metadata/export-per-type/mssql.ts index 4a18496c..5a52c347 100644 --- a/src/lib/data/export-metadata/export-per-type/mssql.ts +++ b/src/lib/data/export-metadata/export-per-type/mssql.ts @@ -156,11 +156,11 @@ export function exportMSSQL({ const notNull = field.nullable ? '' : ' NOT NULL'; // Check if identity column - const identity = field.default - ?.toLowerCase() - .includes('identity') - ? ' IDENTITY(1,1)' - : ''; + const identity = + field.increment || + field.default?.toLowerCase().includes('identity') + ? ' IDENTITY(1,1)' + : ''; const unique = !field.primaryKey && field.unique ? ' UNIQUE' : ''; @@ -168,6 +168,7 @@ export function exportMSSQL({ // Handle default value using SQL Server specific parser const defaultValue = field.default && + !field.increment && !field.default.toLowerCase().includes('identity') ? ` DEFAULT ${parseMSSQLDefault(field)}` : ''; diff --git a/src/lib/data/export-metadata/export-per-type/mysql.ts b/src/lib/data/export-metadata/export-per-type/mysql.ts index ea62f9ec..53601525 100644 --- a/src/lib/data/export-metadata/export-per-type/mysql.ts +++ b/src/lib/data/export-metadata/export-per-type/mysql.ts @@ -274,14 +274,15 @@ export function exportMySQL({ // Handle auto_increment - MySQL uses AUTO_INCREMENT keyword let autoIncrement = ''; if ( - field.primaryKey && - (field.default - ?.toLowerCase() - .includes('identity') || - field.default + field.increment || + (field.primaryKey && + (field.default ?.toLowerCase() - .includes('autoincrement') || - field.default?.includes('nextval')) + .includes('identity') || + field.default + ?.toLowerCase() + .includes('autoincrement') || + field.default?.includes('nextval'))) ) { autoIncrement = ' AUTO_INCREMENT'; } @@ -290,9 +291,10 @@ export function exportMySQL({ const unique = !field.primaryKey && field.unique ? ' UNIQUE' : ''; - // Handle default value + // Handle default value - skip if auto increment const defaultValue = field.default && + !field.increment && !field.default.toLowerCase().includes('identity') && !field.default .toLowerCase() diff --git a/src/lib/data/export-metadata/export-per-type/sqlite.ts b/src/lib/data/export-metadata/export-per-type/sqlite.ts index d60c3a3a..96e69727 100644 --- a/src/lib/data/export-metadata/export-per-type/sqlite.ts +++ b/src/lib/data/export-metadata/export-per-type/sqlite.ts @@ -343,9 +343,10 @@ export function exportSQLite({ if ( field.primaryKey && singleIntegerPrimaryKey && - (field.default - ?.toLowerCase() - .includes('identity') || + (field.increment || + field.default + ?.toLowerCase() + .includes('identity') || field.default ?.toLowerCase() .includes('autoincrement') || @@ -362,6 +363,7 @@ export function exportSQLite({ let defaultValue = ''; if ( field.default && + !field.increment && !field.default.toLowerCase().includes('identity') && !field.default .toLowerCase() diff --git a/src/lib/data/export-metadata/export-sql-script.ts b/src/lib/data/export-metadata/export-sql-script.ts index d5292af0..f152918e 100644 --- a/src/lib/data/export-metadata/export-sql-script.ts +++ b/src/lib/data/export-metadata/export-sql-script.ts @@ -274,8 +274,13 @@ export const exportBaseSQL = ({ sqlScript += ` UNIQUE`; } + // Handle AUTO INCREMENT - add as a comment for AI to process + if (field.increment) { + sqlScript += ` /* AUTO_INCREMENT */`; + } + // Handle DEFAULT value - if (field.default) { + if (field.default && !field.increment) { // Temp remove default user-define value when it have it let fieldDefault = field.default; diff --git a/src/pages/editor-page/side-panel/tables-section/table-list/table-list-item/table-list-item-content/table-field/table-field-modal/table-field-modal.tsx b/src/pages/editor-page/side-panel/tables-section/table-list/table-list-item/table-list-item-content/table-field/table-field-modal/table-field-modal.tsx index 4182fdca..d94abd8a 100644 --- a/src/pages/editor-page/side-panel/tables-section/table-list/table-list-item/table-list-item-content/table-field/table-field-modal/table-field-modal.tsx +++ b/src/pages/editor-page/side-panel/tables-section/table-list/table-list-item/table-list-item-content/table-field/table-field-modal/table-field-modal.tsx @@ -5,7 +5,10 @@ import { Button } from '@/components/button/button'; import { Separator } from '@/components/separator/separator'; import type { DBField } from '@/lib/domain/db-field'; import type { FieldAttributeRange } from '@/lib/data/data-types/data-types'; -import { findDataTypeDataById } from '@/lib/data/data-types/data-types'; +import { + findDataTypeDataById, + supportsAutoIncrementDataType, +} from '@/lib/data/data-types/data-types'; import { Popover, PopoverContent, @@ -83,6 +86,7 @@ export const TableFieldPopover: React.FC = ({ scale: localField.scale, unique: localField.unique, default: localField.default, + increment: localField.increment, }); } prevFieldRef.current = localField; @@ -93,6 +97,11 @@ export const TableFieldPopover: React.FC = ({ [field.type.id, databaseType] ); + const supportsAutoIncrement = useMemo( + () => supportsAutoIncrementDataType(field.type.name), + [field.type.name] + ); + return ( = ({ } /> + {supportsAutoIncrement ? ( +
+ + + setLocalField((current) => ({ + ...current, + increment: !!value, + })) + } + /> +
+ ) : null}