diff --git a/database/migrations/2025_07_15_150000_create_tabelle_millesimali_dinamiche.php b/database/migrations/2025_07_15_150000_create_tabelle_millesimali_dinamiche.php index fc46797..ac56e02 100755 --- a/database/migrations/2025_07_15_150000_create_tabelle_millesimali_dinamiche.php +++ b/database/migrations/2025_07_15_150000_create_tabelle_millesimali_dinamiche.php @@ -96,7 +96,7 @@ public function up(): void $table->foreign('unita_immobiliare_id')->references('id')->on('unita_immobiliari')->onDelete('cascade'); $table->foreign('created_by')->references('id')->on('users')->onDelete('set null'); - $indexName = DB::connection()->getDriverName() === 'sqlite' ? 'unique_tabella_unita_dm' : 'unique_tabella_unita'; + $indexName = DB::connection()->getDriverName() === 'mysql' ? 'unique_tabella_unita' : 'unique_tabella_unita_dm'; $table->unique(['tabella_millesimale_id', 'unita_immobiliare_id'], $indexName); $table->index('millesimi'); }); diff --git a/database/migrations/2025_07_21_165010_create_dettagli_millesimali_table.php b/database/migrations/2025_07_21_165010_create_dettagli_millesimali_table.php index 784e082..484a053 100755 --- a/database/migrations/2025_07_21_165010_create_dettagli_millesimali_table.php +++ b/database/migrations/2025_07_21_165010_create_dettagli_millesimali_table.php @@ -27,7 +27,7 @@ public function up(): void // Indici $table->index(['tabella_id']); $table->index(['unita_immobiliare_id']); - $indexName = DB::connection()->getDriverName() === 'sqlite' ? 'unique_tabella_unita_dett' : 'unique_tabella_unita'; + $indexName = DB::connection()->getDriverName() === 'mysql' ? 'unique_tabella_unita' : 'unique_tabella_unita_dett'; $table->unique(['tabella_id', 'unita_immobiliare_id'], $indexName); // Foreign keys diff --git a/database/migrations/2025_07_22_075105_add_advanced_columns_to_documenti_table.php b/database/migrations/2025_07_22_075105_add_advanced_columns_to_documenti_table.php index b44f81f..26af044 100755 --- a/database/migrations/2025_07_22_075105_add_advanced_columns_to_documenti_table.php +++ b/database/migrations/2025_07_22_075105_add_advanced_columns_to_documenti_table.php @@ -167,6 +167,8 @@ public function up() Schema::table('documenti', function (Blueprint $table) { if (DB::connection()->getDriverName() === 'sqlite') { $indexNames = collect(\DB::select("PRAGMA index_list(documenti)"))->pluck('name'); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + $indexNames = collect(\DB::select("SELECT indexname FROM pg_indexes WHERE tablename = 'documenti'"))->pluck('indexname'); } else { $indexNames = collect(\DB::select("SHOW INDEX FROM documenti"))->pluck('Key_name'); } diff --git a/database/migrations/2025_08_04_205703_add_importo_alias_to_rate_table.php b/database/migrations/2025_08_04_205703_add_importo_alias_to_rate_table.php index b73a1d7..9823768 100755 --- a/database/migrations/2025_08_04_205703_add_importo_alias_to_rate_table.php +++ b/database/migrations/2025_08_04_205703_add_importo_alias_to_rate_table.php @@ -19,9 +19,15 @@ public function up(): void }); } - Schema::table('rate', function (Blueprint $table) { + if (DB::connection()->getDriverName() === 'pgsql') { + DB::statement('ALTER TABLE rate ADD COLUMN importo DECIMAL(10,2) GENERATED ALWAYS AS (importo_rata) STORED'); + } elseif (DB::connection()->getDriverName() === 'mysql') { DB::statement('ALTER TABLE rate ADD COLUMN importo DECIMAL(10,2) GENERATED ALWAYS AS (importo_rata) VIRTUAL'); - }); + } else { + Schema::table('rate', function (Blueprint $table) { + $table->decimal('importo', 10, 2)->nullable(); + }); + } } } diff --git a/database/migrations/2025_08_16_000001_add_soggetti_codice_univoco_trigger.php b/database/migrations/2025_08_16_000001_add_soggetti_codice_univoco_trigger.php index 251c451..329793f 100755 --- a/database/migrations/2025_08_16_000001_add_soggetti_codice_univoco_trigger.php +++ b/database/migrations/2025_08_16_000001_add_soggetti_codice_univoco_trigger.php @@ -8,7 +8,7 @@ { public function up(): void { - if (DB::connection()->getDriverName() === 'sqlite') { + if (DB::connection()->getDriverName() !== 'mysql') { return; } if (!Schema::hasTable('soggetti')) { diff --git a/database/migrations/2025_08_16_000002_update_soggetti_codice_univoco_trigger.php b/database/migrations/2025_08_16_000002_update_soggetti_codice_univoco_trigger.php index d955784..bdf4a62 100755 --- a/database/migrations/2025_08_16_000002_update_soggetti_codice_univoco_trigger.php +++ b/database/migrations/2025_08_16_000002_update_soggetti_codice_univoco_trigger.php @@ -8,7 +8,7 @@ { public function up(): void { - if (DB::connection()->getDriverName() === 'sqlite') { + if (DB::connection()->getDriverName() !== 'mysql') { return; } if (!Schema::hasTable('soggetti')) { diff --git a/database/migrations/2025_11_16_120200_add_cassa_type_to_dati_bancari.php b/database/migrations/2025_11_16_120200_add_cassa_type_to_dati_bancari.php index e26bcda..7a90517 100755 --- a/database/migrations/2025_11_16_120200_add_cassa_type_to_dati_bancari.php +++ b/database/migrations/2025_11_16_120200_add_cassa_type_to_dati_bancari.php @@ -10,7 +10,7 @@ */ public function up(): void { - if (DB::connection()->getDriverName() === 'sqlite') { + if (DB::connection()->getDriverName() !== 'mysql') { return; } if (!Schema::hasTable('dati_bancari')) { @@ -25,7 +25,7 @@ public function up(): void */ public function down(): void { - if (!Schema::hasTable('dati_bancari')) { + if (DB::connection()->getDriverName() !== 'mysql') { return; } diff --git a/database/migrations/2025_12_16_151000_adjust_fornitori_codice_univoco_uniqueness.php b/database/migrations/2025_12_16_151000_adjust_fornitori_codice_univoco_uniqueness.php index 0191700..95d8d28 100755 --- a/database/migrations/2025_12_16_151000_adjust_fornitori_codice_univoco_uniqueness.php +++ b/database/migrations/2025_12_16_151000_adjust_fornitori_codice_univoco_uniqueness.php @@ -13,10 +13,19 @@ public function up(): void return; } - if (DB::connection()->getDriverName() === 'sqlite') { - DB::statement('DROP INDEX IF EXISTS fornitori_codice_univoco_unique'); + if (in_array(DB::connection()->getDriverName(), ['sqlite', 'pgsql'], true)) { + try { + if (DB::connection()->getDriverName() === 'pgsql') { + DB::statement('ALTER TABLE fornitori DROP CONSTRAINT IF EXISTS fornitori_codice_univoco_unique'); + DB::statement('DROP INDEX IF EXISTS fornitori_codice_univoco_unique'); + } else { + DB::statement('DROP INDEX IF EXISTS fornitori_codice_univoco_unique'); + } + } catch (\Throwable) {} if (Schema::hasColumn('fornitori', 'amministratore_id')) { - DB::statement('CREATE UNIQUE INDEX IF NOT EXISTS fornitori_admin_codice_univoco_unique ON fornitori(amministratore_id, codice_univoco)'); + try { + DB::statement('CREATE UNIQUE INDEX IF NOT EXISTS fornitori_admin_codice_univoco_unique ON fornitori(amministratore_id, codice_univoco)'); + } catch (\Throwable) {} } return; } @@ -58,9 +67,18 @@ public function down(): void return; } - if (DB::connection()->getDriverName() === 'sqlite') { - DB::statement('DROP INDEX IF EXISTS fornitori_admin_codice_univoco_unique'); - DB::statement('CREATE UNIQUE INDEX IF NOT EXISTS fornitori_codice_univoco_unique ON fornitori(codice_univoco)'); + if (in_array(DB::connection()->getDriverName(), ['sqlite', 'pgsql'], true)) { + try { + if (DB::connection()->getDriverName() === 'pgsql') { + DB::statement('ALTER TABLE fornitori DROP CONSTRAINT IF EXISTS fornitori_admin_codice_univoco_unique'); + DB::statement('DROP INDEX IF EXISTS fornitori_admin_codice_univoco_unique'); + } else { + DB::statement('DROP INDEX IF EXISTS fornitori_admin_codice_univoco_unique'); + } + } catch (\Throwable) {} + try { + DB::statement('CREATE UNIQUE INDEX IF NOT EXISTS fornitori_codice_univoco_unique ON fornitori(codice_univoco)'); + } catch (\Throwable) {} return; } diff --git a/database/migrations/2025_12_18_174000_fix_fornitori_old_id_unique_per_amministratore.php b/database/migrations/2025_12_18_174000_fix_fornitori_old_id_unique_per_amministratore.php index a63be92..6089225 100755 --- a/database/migrations/2025_12_18_174000_fix_fornitori_old_id_unique_per_amministratore.php +++ b/database/migrations/2025_12_18_174000_fix_fornitori_old_id_unique_per_amministratore.php @@ -19,6 +19,12 @@ public function up(): void ->filter() ->unique() ->values(); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + $indexNames = collect(DB::select("SELECT indexname FROM pg_indexes WHERE tablename = 'fornitori'")) + ->map(fn($row) => (string) ($row->indexname ?? '')) + ->filter() + ->unique() + ->values(); } else { $indexNames = collect(DB::select('SHOW INDEX FROM fornitori')) ->map(fn($row) => (string) ($row->Key_name ?? '')) @@ -50,6 +56,12 @@ public function down(): void ->filter() ->unique() ->values(); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + $indexNames = collect(DB::select("SELECT indexname FROM pg_indexes WHERE tablename = 'fornitori'")) + ->map(fn($row) => (string) ($row->indexname ?? '')) + ->filter() + ->unique() + ->values(); } else { $indexNames = collect(DB::select('SHOW INDEX FROM fornitori')) ->map(fn($row) => (string) ($row->Key_name ?? '')) diff --git a/database/migrations/2025_12_20_160000_add_condominio_to_rubrica_categoria_enum.php b/database/migrations/2025_12_20_160000_add_condominio_to_rubrica_categoria_enum.php index f0fa83f..dedb1fc 100755 --- a/database/migrations/2025_12_20_160000_add_condominio_to_rubrica_categoria_enum.php +++ b/database/migrations/2025_12_20_160000_add_condominio_to_rubrica_categoria_enum.php @@ -8,7 +8,7 @@ { public function up(): void { - if (DB::connection()->getDriverName() === 'sqlite') { + if (DB::connection()->getDriverName() !== 'mysql') { return; } if (! Schema::hasTable('rubrica_universale') || ! Schema::hasColumn('rubrica_universale', 'categoria')) { @@ -22,7 +22,7 @@ public function up(): void public function down(): void { - if (! Schema::hasTable('rubrica_universale') || ! Schema::hasColumn('rubrica_universale', 'categoria')) { + if (DB::connection()->getDriverName() !== 'mysql') { return; } diff --git a/database/migrations/2026_01_04_000001_add_legacy_year_to_dettaglio_importi_tabella.php b/database/migrations/2026_01_04_000001_add_legacy_year_to_dettaglio_importi_tabella.php index d08e942..a762169 100755 --- a/database/migrations/2026_01_04_000001_add_legacy_year_to_dettaglio_importi_tabella.php +++ b/database/migrations/2026_01_04_000001_add_legacy_year_to_dettaglio_importi_tabella.php @@ -32,6 +32,10 @@ public function up(): void // Now drop the old unique index (raw statement to avoid Blueprint deferred-execution issues). if (DB::connection()->getDriverName() === 'sqlite') { DB::statement('DROP INDEX IF EXISTS unique_tabella_unita_ruolo'); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + try { + DB::statement('ALTER TABLE "dettaglio_importi_tabella" DROP CONSTRAINT IF EXISTS "unique_tabella_unita_ruolo"'); + } catch (\Throwable) {} } else { DB::statement('ALTER TABLE `dettaglio_importi_tabella` DROP INDEX `unique_tabella_unita_ruolo`'); } @@ -55,6 +59,10 @@ public function down(): void if (DB::connection()->getDriverName() === 'sqlite') { DB::statement('DROP INDEX IF EXISTS unique_tabella_unita_ruolo_anno'); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + try { + DB::statement('ALTER TABLE "dettaglio_importi_tabella" DROP CONSTRAINT IF EXISTS "unique_tabella_unita_ruolo_anno"'); + } catch (\Throwable) {} } else { DB::statement('ALTER TABLE `dettaglio_importi_tabella` DROP INDEX `unique_tabella_unita_ruolo_anno`'); } diff --git a/database/migrations/2026_03_23_160000_add_archive_reference_and_visibility_to_documenti_table.php b/database/migrations/2026_03_23_160000_add_archive_reference_and_visibility_to_documenti_table.php index 44e6fb2..3b06d4d 100755 --- a/database/migrations/2026_03_23_160000_add_archive_reference_and_visibility_to_documenti_table.php +++ b/database/migrations/2026_03_23_160000_add_archive_reference_and_visibility_to_documenti_table.php @@ -41,6 +41,8 @@ public function up(): void Schema::table('documenti', function (Blueprint $table): void { if (\DB::connection()->getDriverName() === 'sqlite') { $indexNames = collect((array) \DB::select("PRAGMA index_list('documenti')"))->pluck('name'); + } elseif (\DB::connection()->getDriverName() === 'pgsql') { + $indexNames = collect((array) \DB::select("SELECT indexname FROM pg_indexes WHERE tablename = 'documenti'"))->pluck('indexname'); } else { $indexNames = collect((array) \DB::select('SHOW INDEX FROM documenti'))->pluck('Key_name'); } diff --git a/database/migrations/2026_04_14_150000_add_cod_forn_to_fornitori_table.php b/database/migrations/2026_04_14_150000_add_cod_forn_to_fornitori_table.php index a39e77e..8b6b590 100755 --- a/database/migrations/2026_04_14_150000_add_cod_forn_to_fornitori_table.php +++ b/database/migrations/2026_04_14_150000_add_cod_forn_to_fornitori_table.php @@ -27,6 +27,9 @@ public function up(): void if (DB::connection()->getDriverName() === 'sqlite') { $indexes = collect(DB::select("PRAGMA index_list('fornitori')")) ->pluck('name'); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + $indexes = collect(DB::select("SELECT indexname FROM pg_indexes WHERE tablename = 'fornitori'")) + ->pluck('indexname'); } else { $indexes = collect(DB::select("SHOW INDEX FROM fornitori")) ->pluck('Key_name'); @@ -48,6 +51,9 @@ public function down(): void if (DB::connection()->getDriverName() === 'sqlite') { $indexes = collect(DB::select("PRAGMA index_list('fornitori')")) ->pluck('name'); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + $indexes = collect(DB::select("SELECT indexname FROM pg_indexes WHERE tablename = 'fornitori'")) + ->pluck('indexname'); } else { $indexes = collect(DB::select("SHOW INDEX FROM fornitori")) ->pluck('Key_name'); diff --git a/database/migrations/2026_04_15_220000_update_dettaglio_millesimi_unique_for_ruolo_legacy.php b/database/migrations/2026_04_15_220000_update_dettaglio_millesimi_unique_for_ruolo_legacy.php index c221bc7..fbf0672 100755 --- a/database/migrations/2026_04_15_220000_update_dettaglio_millesimi_unique_for_ruolo_legacy.php +++ b/database/migrations/2026_04_15_220000_update_dettaglio_millesimi_unique_for_ruolo_legacy.php @@ -22,7 +22,12 @@ public function up(): void Schema::table('dettaglio_millesimi', function (Blueprint $table): void { try { - DB::statement('ALTER TABLE `dettaglio_millesimi` DROP INDEX `unique_tabella_unita`'); + if (DB::connection()->getDriverName() === 'mysql') { + DB::statement('ALTER TABLE `dettaglio_millesimi` DROP INDEX `unique_tabella_unita`'); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + DB::statement('ALTER TABLE "dettaglio_millesimi" DROP CONSTRAINT IF EXISTS "unique_tabella_unita_dm"'); + DB::statement('ALTER TABLE "dettaglio_millesimi" DROP CONSTRAINT IF EXISTS "unique_tabella_unita"'); + } } catch (\Throwable) { // Already dropped or not present. } @@ -36,12 +41,17 @@ public function down(): void } Schema::table('dettaglio_millesimi', function (Blueprint $table): void { - $table->unique(['tabella_millesimale_id', 'unita_immobiliare_id'], 'unique_tabella_unita'); + $indexName = DB::connection()->getDriverName() === 'mysql' ? 'unique_tabella_unita' : 'unique_tabella_unita_dm'; + $table->unique(['tabella_millesimale_id', 'unita_immobiliare_id'], $indexName); }); Schema::table('dettaglio_millesimi', function (Blueprint $table): void { try { - DB::statement('ALTER TABLE `dettaglio_millesimi` DROP INDEX `unique_tabella_unita_ruolo_legacy`'); + if (DB::connection()->getDriverName() === 'mysql') { + DB::statement('ALTER TABLE `dettaglio_millesimi` DROP INDEX `unique_tabella_unita_ruolo_legacy`'); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + DB::statement('ALTER TABLE "dettaglio_millesimi" DROP CONSTRAINT IF EXISTS "unique_tabella_unita_ruolo_legacy"'); + } } catch (\Throwable) { // Already dropped or not present. } diff --git a/database/migrations/2026_06_03_160000_scope_stabili_code_by_amministratore.php b/database/migrations/2026_06_03_160000_scope_stabili_code_by_amministratore.php index 51385a1..6ca7b4f 100755 --- a/database/migrations/2026_06_03_160000_scope_stabili_code_by_amministratore.php +++ b/database/migrations/2026_06_03_160000_scope_stabili_code_by_amministratore.php @@ -39,7 +39,14 @@ public function down(): void private function dropIndex(string $table, string $index): void { try { - DB::statement(sprintf('ALTER TABLE `%s` DROP INDEX `%s`', $table, $index)); + if (DB::connection()->getDriverName() === 'mysql') { + DB::statement(sprintf('ALTER TABLE `%s` DROP INDEX `%s`', $table, $index)); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + DB::statement(sprintf('ALTER TABLE "%s" DROP CONSTRAINT IF EXISTS "%s"', $table, $index)); + DB::statement(sprintf('DROP INDEX IF EXISTS "%s"', $index)); + } elseif (DB::connection()->getDriverName() === 'sqlite') { + DB::statement(sprintf('DROP INDEX IF EXISTS `%s`', $index)); + } } catch (\Throwable) { } } diff --git a/database/migrations/2026_06_03_171500_scope_unita_codes_by_stabile.php b/database/migrations/2026_06_03_171500_scope_unita_codes_by_stabile.php index 1d2de98..197714c 100755 --- a/database/migrations/2026_06_03_171500_scope_unita_codes_by_stabile.php +++ b/database/migrations/2026_06_03_171500_scope_unita_codes_by_stabile.php @@ -71,6 +71,9 @@ private function dropIndex(string $table, string $index): void try { if (DB::connection()->getDriverName() === 'sqlite') { DB::statement(sprintf('DROP INDEX IF EXISTS `%s`', $index)); + } elseif (DB::connection()->getDriverName() === 'pgsql') { + DB::statement(sprintf('ALTER TABLE "%s" DROP CONSTRAINT IF EXISTS "%s"', $table, $index)); + DB::statement(sprintf('DROP INDEX IF EXISTS "%s"', $index)); } else { DB::statement(sprintf('ALTER TABLE `%s` DROP INDEX `%s`', $table, $index)); } diff --git a/database/migrations/2026_06_25_121000_expand_arera_settori_columns.php b/database/migrations/2026_06_25_121000_expand_arera_settori_columns.php index a96bd53..924b918 100755 --- a/database/migrations/2026_06_25_121000_expand_arera_settori_columns.php +++ b/database/migrations/2026_06_25_121000_expand_arera_settori_columns.php @@ -8,7 +8,7 @@ { public function up(): void { - if (DB::connection()->getDriverName() === 'sqlite') { + if (DB::connection()->getDriverName() !== 'mysql') { return; } if (! Schema::hasTable('arera_settori_attivita')) { @@ -27,7 +27,7 @@ public function up(): void public function down(): void { - if (DB::connection()->getDriverName() === 'sqlite') { + if (DB::connection()->getDriverName() !== 'mysql') { return; } if (! Schema::hasTable('arera_settori_attivita')) {