*/
package fr.gouv.finances.dgfip.xemelios.edmn.patchers;
-import fr.gouv.finances.dgfip.utils.xml.FactoryProvider;
-import fr.gouv.finances.dgfip.xemelios.common.FileInfo;
-import fr.gouv.finances.dgfip.xemelios.data.impl.pool.PoolManager;
-import fr.gouv.finances.dgfip.xemelios.importers.AbstractImportPatcherImpl;
-import fr.gouv.finances.dgfip.xemelios.importers.QueryProvider;
-
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
+
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+
import org.apache.log4j.Logger;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
+import fr.gouv.finances.dgfip.utils.xml.FactoryProvider;
+import fr.gouv.finances.dgfip.xemelios.common.FileInfo;
+import fr.gouv.finances.dgfip.xemelios.data.impl.pool.PoolManager;
+import fr.gouv.finances.dgfip.xemelios.importers.AbstractImportPatcherImpl;
+
/**
*
* @author christophe.marchand
public class NumLiassePatcher extends AbstractImportPatcherImpl {
private static final Logger logger = Logger.getLogger(NumLiassePatcher.class);
- private transient final QueryProvider queryProvider;
-
protected DocumentBuilderFactory domFactory;
protected TransformerFactory transformerFactory;
domFactory = FactoryProvider.getDocumentBuilderFactory();
domFactory.setNamespaceAware(true);
transformerFactory = FactoryProvider.getTransformerFactory();
- queryProvider = this.getQueryProvider();
+ initializeQueryProvider();
}
@Override
conPatch = PoolManager.getInstance().getConnection();
con2 = PoolManager.getInstance().getConnection();
con3 = PoolManager.getInstance().getConnection();
+
+ // ---------------------------------------------------
+ // on vérifie si la table existe et on la créée au besoin (if not
+ // exists n'existe pas pour Oracle)
+ boolean tableExists;
+ ResultSet rsTableExists = conPatch.createStatement().executeQuery(queryProvider.getQuery("checkTableIndexPatchExists"));
+ try {
+ tableExists = rsTableExists.next();
+ } finally {
+ rsTableExists.close();
+ rsTableExists = null;
+ }
+
Statement st = conPatch.createStatement();
- st.execute(queryProvider.getQuery("createTableIndexPatch"));
+ if (!tableExists) {
+ st.execute(queryProvider.getQuery("createTableIndexPatch"));
+ }
+ // --------------------------------------------------
+
st.execute(queryProvider.getQuery("truncateTableIndexPatch"));
PreparedStatement ps = conPatch.prepareStatement(queryProvider.getQuery("insertIndexPatch"));
BufferedReader br = new BufferedReader(new FileReader(indexFile));
+checkTableIndexPatchExists=SELECT 1 FROM USER_TABLES WHERE TABLE_NAME='INDEX_PATCH'
+
createTableIndexPatch=\
- CREATE TABLE IF NOT EXISTS INDEX_PATCH ( \
- IND_ANNEE_GEST VARCHAR(2) not null, \
- IND_TRI_GEST VARCHAR(1) not null, \
- IND_COMPTABLE VARCHAR(6) not null, \
- IND_IMPUTATION VARCHAR(1) not null, \
- IND_MINISTERE VARCHAR(2) not null, \
- IND_COMPTESPE VARCHAR(5) not null, \
- IND_LOCALE VARCHAR(4) not null, \
- IND_ANNEE_TRSP VARCHAR(2) not null, \
- IND_TRI_TRSP VARCHAR(1) not null, \
- IND_SECTION_BUDG VARCHAR(2), \
- IND_CPTESPENAT VARCHAR(5) not null, \
- IND_NATIONALE VARCHAR(6), \
- INDEX IX_INDEX (IND_ANNEE_GEST,IND_TRI_GEST,IND_COMPTABLE,IND_IMPUTATION,IND_MINISTERE,IND_LOCALE) \
- )
-
+ begin \
+ execute immediate 'CREATE TABLE INDEX_PATCH ( \
+ IND_ANNEE_GEST VARCHAR(2) not null, \
+ IND_TRI_GEST VARCHAR(1) not null, \
+ IND_COMPTABLE VARCHAR(6) not null, \
+ IND_IMPUTATION VARCHAR(1) not null, \
+ IND_MINISTERE VARCHAR(2) not null, \
+ IND_COMPTESPE VARCHAR(5) not null, \
+ IND_LOCALE VARCHAR(4) not null, \
+ IND_ANNEE_TRSP VARCHAR(2) not null, \
+ IND_TRI_TRSP VARCHAR(1) not null, \
+ IND_SECTION_BUDG VARCHAR(2), \
+ IND_CPTESPENAT VARCHAR(5) not null, \
+ IND_NATIONALE VARCHAR(6) \
+ )'; \
+ \
+ execute immediate 'CREATE INDEX IX_INDEX ON INDEX_PATCH(IND_ANNEE_GEST,IND_TRI_GEST,IND_COMPTABLE,IND_IMPUTATION,IND_MINISTERE,IND_LOCALE)'; \
+ end;
+
request=\
SELECT edmn.COLLECTIVITE, edmn.BUDGET, edmn.DOC_ID \
FROM EDMN_ETAT edmn \
LEFT OUTER JOIN EDMN_ETAT_LIASSES liasse ON edmn.COLLECTIVITE=liasse.COLLECTIVITE AND edmn.BUDGET=liasse.BUDGET AND edmn.DOC_ID=liasse.DOC_ID \
GROUP BY edmn.COLLECTIVITE, edmn.BUDGET, edmn.DOC_ID \
HAVING count(liasse.DOC_ID) = 0 \
- ) as toto
+ )
truncateTableIndexPatch=TRUNCATE TABLE INDEX_PATCH