zeroflag commented on a change in pull request #1733:
URL: https://github.com/apache/hive/pull/1733#discussion_r566803735



##########
File path: 
standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
##########
@@ -10614,6 +10644,101 @@ public void dropStoredProcedure(String catName, 
String dbName, String funcName)
     return names;
   }
 
+  @Override
+  public void addPackage(Package request) throws NoSuchObjectException, 
MetaException {
+    boolean committed = false;
+    MPackage mPkg;
+    Query query = null;
+    String catName = normalizeIdentifier(request.getCatName());
+    String dbName = normalizeIdentifier(request.getDbName());
+    MDatabase db = getMDatabase(catName, dbName);
+    try {
+      openTransaction();
+      query = findPackageQuery();
+      mPkg = (MPackage) query.execute(request.getPackageName(), dbName, 
catName);
+      pm.retrieve(mPkg);
+      if (mPkg == null) { // create new
+        mPkg = new MPackage();
+        populate(request, db, mPkg);
+        pm.makePersistent(mPkg);
+      } else { // update existing
+        populate(request, db, mPkg);
+      }
+      committed = commitTransaction();
+    } finally {
+      rollbackAndCleanup(committed, query);
+    }
+  }
+
+  @Override
+  public Package findPackage(PackageRequest request) {
+    MPackage mPkg = findMPackage(request.getCatName(), request.getDbName(), 
request.getPackageName());
+    return mPkg == null ? null : convertToPackage(request.getCatName(), mPkg);
+  }
+
+  public List<String> listPackages(ListPackageRequest request) {
+    boolean committed = false;
+    Query query = null;
+    final String catName = normalizeIdentifier(request.getCatName());
+    final String dbName = request.isSetDbName() ? 
normalizeIdentifier(request.getDbName()) : null;
+    List<String> names;
+    try {
+      openTransaction();
+      if (request.isSetDbName()) {
+        query = pm.newQuery("SELECT name FROM 
org.apache.hadoop.hive.metastore.model.MPackage " +
+                "WHERE database.catalogName == catName && database.name == 
db");
+        query.declareParameters("java.lang.String catName, java.lang.String 
db");
+        query.setResult("name");
+        names = new ArrayList<>((Collection<String>) query.execute(catName, 
dbName));
+      } else {
+        query = pm.newQuery("SELECT name FROM 
org.apache.hadoop.hive.metastore.model.MPackage " +
+                "WHERE database.catalogName == catName");
+        query.declareParameters("java.lang.String catName");
+        query.setResult("name");
+        names = new ArrayList<>((Collection<String>) query.execute(catName));
+      }
+      committed = commitTransaction();
+    } finally {
+      rollbackAndCleanup(committed, query);
+    }
+    return names;
+  }
+
+  public void dropPackage(PackageRequest request) {
+    boolean success = false;
+    try {
+      openTransaction();
+      MPackage proc = findMPackage(request.getCatName(), request.getDbName(), 
request.getPackageName());
+      pm.retrieve(proc);
+      if (proc != null) {

Review comment:
       Right. I think from a language point of view it doesn't make much sense 
to differentiate these 2 cases. In a file based mode this is how it was always 
handled. How about adding a boolean flag indicating createOrUpdate or create 
only? 




----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

For queries about this service, please contact Infrastructure at:
[email protected]



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to