Add purge_where_clause option for superset purging (closes #3)#4
Add purge_where_clause option for superset purging (closes #3)#4
Conversation
|
Revisado contra issue #3. Divergencia grave spec vs implementación. Bloqueante — PR viola spec del issueIssue #3 dice: @purge_where_clause = options.fetch(:purge_where_clause, @where_clause)
PR implementa ( @purge_where_clause = options[:purge_where_clause]
Contradicción en docsPR body y README ejemplo: purge_where_clause: nil # purga TODO el mesCon la impl actual, Dos fixes posibles:
Recomiendo A — el issue fue explícito. Otros hallazgos
|
c1da25c to
15d36a5
Compare
|
Revisado commit Quedan 3 issues: 1. YARD en
|
15d36a5 to
e6452d9
Compare
|
Revisado commit
Quedan 3: 1. YARD sigue contradiciendo el código
Código en return nil if @purge_where_clause.nil? || @purge_where_clause.empty?
Fix preferido (match YARD, elimina truco def purge_where_sql
return nil if @purge_where_clause.nil?
sql = date_range_sql
sql += \" AND #{@purge_where_clause}\" unless @purge_where_clause.empty?
sql
endAsí Alternativa: dejar código como está y corregir YARD → 2. Test integrity-check solo asserta la mitad
expect(mock_pg_conn).to receive(:exec).with(/DELETE FROM versions.*status = 'deleted'/m)Verifica que el DELETE usa expect(mock_duckdb).to receive(:query).with(/isp_id IS NOT NULL/).at_least(:once).and_return([[10]])
expect(mock_duckdb).not_to receive(:query).with(/status = 'deleted'/)3. Falta test del use case primario del issueNingún test ejercita el escenario real que justificó el feature (archivar subset, purgar superset). Los 4 tests actuales cubren: backwards compat, empty=skip, integrity-uses-base, independencia. Falta: it \"archives subset but purges superset (primary use case)\" do
engine = described_class.new(
base_options_with_purge.merge(
where_clause: \"isp_id IS NOT NULL\",
purge_where_clause: \"1=1\" # o '' si se fixea #1
)
)
# DELETE no debe contener \"isp_id IS NOT NULL\"
expect(mock_pg_conn).to receive(:exec).with(/DELETE FROM versions/).twice do |sql|
expect(sql).not_to include(\"isp_id IS NOT NULL\")
mock_pg_result
end
# COUNT/integrity sí debe contener \"isp_id IS NOT NULL\"
expect(mock_duckdb).to receive(:query).with(/isp_id IS NOT NULL/).at_least(:once).and_return([[10]])
...
endCierra el loop del issue. |
e6452d9 to
a710de8
Compare
|
Revisado commit
Opcional (no bloqueante)Fortalecer assert del DELETE en primary-use-case test para verificar que no hereda el filtro del archive: expect(mock_pg_conn).to receive(:exec).with(/DELETE FROM versions/).twice do |sql|
expect(sql).not_to include(\"isp_id IS NOT NULL\")
mock_pg_result
endVeredictoLGTM 👍 listo para merge. Bump |
- New optional purge_where_clause parameter in Engine#initialize - Default nil means no purge (caller must handle it explicitly) - New purge_where_sql method (sibling to base_where_sql) - build_delete_sql now uses purge_where_sql instead of base_where_sql - Integrity check still uses base_where_sql (verifies archived data, not purged) - Added 4 new tests for purge_where_clause behavior - Updated README with example for subset archive / superset purge - Bump version to 0.6.0 Fixes #3
a710de8 to
858b6bb
Compare
Summary
Implementa la opción
purge_where_clausesolicitada en issue #3.Cambios
purge_where_clauseenEngine#initialize(opcional, defaultnil)purge_where_sql— genera SQL para DELETE usandopurge_where_clausebuild_delete_sqlahora usapurge_where_sqlen vez debase_where_sqlbase_where_sql(verifica lo archivado, no lo purgado)Uso
Tests
4 nuevos tests cubriendo:
purge_where_clauseesnilwhere_clausepurge_where_clausepurge_where_clauseindependiente dewhere_clauseSemver
Bump:
0.5.x→0.6.0(cambio aditivo + backwards compatible)