You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2016/11/03 17:53:33 UTC
[3/6] cayenne git commit: [CAY-2128] Modeler stored procedures are
not imported
[CAY-2128] Modeler stored procedures are not imported
Project: http://git-wip-us.apache.org/repos/asf/cayenne/repo
Commit: http://git-wip-us.apache.org/repos/asf/cayenne/commit/988835af
Tree: http://git-wip-us.apache.org/repos/asf/cayenne/tree/988835af
Diff: http://git-wip-us.apache.org/repos/asf/cayenne/diff/988835af
Branch: refs/heads/master
Commit: 988835afe6c102bd87e96d5641fe9cc2ba863f83
Parents: ebeb86f
Author: Nikita Timofeev <st...@gmail.com>
Authored: Wed Nov 2 15:33:32 2016 +0300
Committer: Nikita Timofeev <st...@gmail.com>
Committed: Wed Nov 2 15:59:01 2016 +0300
----------------------------------------------------------------------
.../cayenne/dbsync/reverse/db/DbLoader.java | 6 ++--
.../java/org/apache/cayenne/map/Procedure.java | 7 +++++
.../tools/dbimport/DefaultDbImportAction.java | 31 ++++++++++++++++++++
3 files changed, 41 insertions(+), 3 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cayenne/blob/988835af/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
----------------------------------------------------------------------
diff --git a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
index 89f5f5e..9e447c6 100644
--- a/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
+++ b/cayenne-dbsync/src/main/java/org/apache/cayenne/dbsync/reverse/db/DbLoader.java
@@ -446,10 +446,10 @@ public class DbLoader {
try (ResultSet columnsRS = getMetaData().getProcedureColumns(catalog, schema, null, null);) {
while (columnsRS.next()) {
-
- String s = columnsRS.getString("PROCEDURE_SCHEM");
+ String procSchema = columnsRS.getString("PROCEDURE_SCHEM");
+ String procCatalog = columnsRS.getString("PROCEDURE_CAT");
String name = columnsRS.getString("PROCEDURE_NAME");
- String key = (s == null ? "" : s + '.') + name;
+ String key = Procedure.generateFullyQualifiedName(procCatalog, procSchema, name);
Procedure procedure = procedures.get(key);
if (procedure == null) {
continue;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/988835af/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java
----------------------------------------------------------------------
diff --git a/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java b/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java
index d411f58..a40a22e 100644
--- a/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java
+++ b/cayenne-server/src/main/java/org/apache/cayenne/map/Procedure.java
@@ -124,6 +124,13 @@ public class Procedure implements ConfigurationNode, CayenneMapEntry, XMLSeriali
* Returns procedure name including schema and catalog, if present.
*/
public String getFullyQualifiedName() {
+ return generateFullyQualifiedName(catalog, schema, name);
+ }
+
+ /**
+ * Utility function to generate fully qualified name for procedure
+ */
+ public static String generateFullyQualifiedName(String catalog, String schema, String name) {
return (catalog != null ? catalog + '.' : "")
+ (schema != null ? schema + '.' : "")
+ name;
http://git-wip-us.apache.org/repos/asf/cayenne/blob/988835af/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
----------------------------------------------------------------------
diff --git a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
index df548c3..e417f2a 100644
--- a/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
+++ b/cayenne-tools/src/main/java/org/apache/cayenne/tools/dbimport/DefaultDbImportAction.java
@@ -36,12 +36,15 @@ import org.apache.cayenne.dbsync.merge.factory.MergerTokenFactoryProvider;
import org.apache.cayenne.dbsync.naming.ObjectNameGenerator;
import org.apache.cayenne.dbsync.reverse.db.DbLoader;
import org.apache.cayenne.dbsync.reverse.db.DbLoaderConfiguration;
+import org.apache.cayenne.dbsync.reverse.filters.FiltersConfig;
+import org.apache.cayenne.dbsync.reverse.filters.PatternFilter;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.EntityResolver;
import org.apache.cayenne.map.MapLoader;
import org.apache.cayenne.map.ObjEntity;
import org.apache.cayenne.map.ObjRelationship;
+import org.apache.cayenne.map.Procedure;
import org.apache.cayenne.project.Project;
import org.apache.cayenne.project.ProjectSaver;
import org.apache.cayenne.resource.URLResource;
@@ -162,6 +165,7 @@ public class DefaultDbImportAction implements DbImportAction {
config.getNameGenerator(),
config.getMeaningfulPKFilter(),
config.isUsePrimitives());
+ hasChanges |= syncProcedures(targetDataMap, loadedFomDb, loaderConfig.getFiltersConfig());
if (hasChanges) {
saveLoaded(targetDataMap);
@@ -295,6 +299,33 @@ public class DefaultDbImportAction implements DbImportAction {
return true;
}
+ private boolean syncProcedures(DataMap targetDataMap, DataMap loadedDataMap, FiltersConfig filters) {
+ Collection<Procedure> procedures = loadedDataMap.getProcedures();
+ if (procedures.isEmpty()) {
+ return false;
+ }
+
+ boolean hasChanges = false;
+ for (Procedure procedure : procedures) {
+ PatternFilter proceduresFilter = filters.proceduresFilter(procedure.getCatalog(), procedure.getSchema());
+ if (proceduresFilter == null || !proceduresFilter.isIncluded(procedure.getName())) {
+ continue;
+ }
+
+ Procedure oldProcedure = targetDataMap.getProcedure(procedure.getName());
+ // maybe we need to compare oldProcedure's and procedure's fully qualified names?
+ if (oldProcedure != null) {
+ targetDataMap.removeProcedure(procedure.getName());
+ logger.info("Replace procedure " + procedure.getName());
+ } else {
+ logger.info("Add new procedure " + procedure.getName());
+ }
+ targetDataMap.addProcedure(procedure);
+ hasChanges = true;
+ }
+ return hasChanges;
+ }
+
protected void saveLoaded(DataMap dataMap) throws FileNotFoundException {
ConfigurationTree<DataMap> projectRoot = new ConfigurationTree<>(dataMap);
Project project = new Project(projectRoot);