Merge pull request #1856 from bendiy/4_7_x
authorSteve Hackbarth <stephenhackbarth@gmail.com>
Thu, 18 Sep 2014 19:38:29 +0000 (15:38 -0400)
committerSteve Hackbarth <stephenhackbarth@gmail.com>
Thu, 18 Sep 2014 19:38:29 +0000 (15:38 -0400)
Add personal privilege access to a Customer that a Ship To is on

13 files changed:
enyo-client/database/source/delete_system_orms.sql
enyo-client/database/source/wipe_views.sql
enyo-client/database/source/xt/functions/pg_advisory_unlock.sql
enyo-client/database/source/xt/functions/trylock.sql
foundation-database/public/functions/logout.sql
lib/orm/source/xt/javascript/data.sql
scripts/install_xtuple.sh
scripts/lib/build_database.js
scripts/xml/distribution_install.xml
scripts/xml/distribution_package.xml
scripts/xml/postbooks_package.xml
scripts/xml/xtmfg_install.xml
scripts/xml/xtmfg_package.xml

index 79e2b31..66ea976 100644 (file)
@@ -1,10 +1,10 @@
-DO $$
+do $$
  /* Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
-     See www.xm.ple.com/CPAL for the full text of the software license. */
+    See www.xtuple.com/CPAL for the full text of the software license. */
 
-  plv8.execute("select xt.js_init()");
-  plv8.execute("alter table xt.orm disable trigger orm_did_change");
+  plv8.execute("select xt.js_init();");
+  plv8.execute("alter table xt.orm disable trigger orm_did_change;");
   plv8.execute("delete from xt.orm where orm_json ~ '\"isSystem\":true';");
-  plv8.execute("alter table xt.orm enable trigger orm_did_change");
+  plv8.execute("alter table xt.orm enable trigger orm_did_change;");
 
 $$ language plv8;
index 87ec0d3..b921575 100644 (file)
@@ -1,19 +1,16 @@
-DO $$
+do $$
  /* Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple.
      See www.xm.ple.com/CPAL for the full text of the software license. */
-
-  var sql,
-    result,
-    viewname,
-    schemaname,
-    i;
-
-  sql = "select schemaname, viewname from pg_views where schemaname in ('xm','sys', 'xt');"
-  result = plv8.execute(sql);
-  for (i = 0; i < result.length; i++) {
-    viewname = result[i].viewname;
-    schemaname = result[i].schemaname;
-    plv8.execute('drop view if exists ' + schemaname + '.' + viewname + ' cascade;');
-  }
-
-$$ language plv8;
+declare
+  sqlstring text;
+begin
+  select string_agg('drop view ' || t.oid::regclass || ';', ' ') into sqlstring
+    from pg_class t
+    join pg_namespace n on n.oid = relnamespace
+   where relkind = 'v'
+     and nspname in ('xm','sys', 'xt');
+  if length(sqlstring) > 0 then
+    execute sqlstring;
+  end if;
+end
+$$;
index c892882..25c3b7a 100644 (file)
@@ -1,4 +1,8 @@
 create or replace function xt.pg_advisory_unlock(oid integer, id integer) returns boolean as $$
+  var sql = "select pg_catalog.pg_advisory_unlock($1, $2) as result;";
+  return plv8.execute(sql, [oid, id])[0].result;
+  /* temporary: let qt client use advisory locks but web client use xt.lock */
+
   var pid = plv8.execute("select pg_backend_pid() as pid;")[0].pid,
     username = plv8.execute("select geteffectivextuser() as username;")[0].username,
     sql = "select * from xt.lock where lock_table_oid = $1 and lock_record_id = $2 and lock_username = $3 and lock_pid = $4;",
index 0c73312..719607b 100644 (file)
@@ -1,4 +1,8 @@
 create or replace function xt.trylock(oid integer, id integer) returns boolean as $$
+  var sql = "select public.trylock($1, $2) as result;";
+  return plv8.execute(sql, [oid, id])[0].result;
+  /* temporary: let qt client use advisory locks but web client use xt.lock */
+
   var pid = plv8.execute("select pg_backend_pid() as pid;")[0].pid,
     data = Object.create(XT.Data),
     lock = data.tryLock(oid, id, {pid: pid});
index 1626bf2..5806fc8 100644 (file)
@@ -3,9 +3,16 @@ CREATE OR REPLACE FUNCTION logout() RETURNS integer AS $$
 -- Copyright (c) 1999-2014 by OpenMFG LLC, d/b/a xTuple. 
 -- See www.xtuple.com/CPAL for the full text of the software license.
 BEGIN
-  PERFORM pg_advisory_unlock(datid::integer, procpid)
+  IF (compareversion('9.2.0') <= 0)
+  THEN
+    PERFORM pg_advisory_unlock(datid::integer, pid)
      FROM pg_stat_activity
-    WHERE(procpid = pg_backend_pid());
+    WHERE(pid = pg_backend_pid());
+  ELSE
+    PERFORM pg_advisory_unlock(datid::integer, procpid)
+       FROM pg_stat_activity
+      WHERE(procpid = pg_backend_pid());
+  END IF;
 
   RETURN 0;
 END;
index 0cacd18..ada5e1b 100644 (file)
@@ -1727,6 +1727,31 @@ select xt.install_js('XT','Data','xtuple', $$
       return ret;
     },
 
+    /**
+     * Get the current database server version.
+     * If the optional precision argument is passed, return the first prec
+     * fields of the full version number.
+     *
+     * @example
+     * var x   = getPgVersion(1),       // '9'
+     *     xy  = getPgVersion(2),       // '9.1'
+     *     xyz = getPgVersion(3),       // '9.1.3'
+     *     all = getPgVersion();        // '9.1.3'
+     *
+     * @param   {Number} proc - optional precision
+     * @returns {String} X[.Y[.Z]]
+     */
+    getPgVersion: function (prec) {
+      var q = plv8.execute("select setting from pg_settings " +
+                           "where name='server_version';"),
+          ret;
+      ret = q[0].setting;
+      if (typeof prec === 'number') {
+        ret = ret.split(".").slice(0,prec).join(".");
+      }
+      return ret;
+    },
+
     /**
      * Get the oid for a given table name.
      *
@@ -2399,12 +2424,14 @@ select xt.install_js('XT','Data','xtuple', $$
         lockExp,
         oid,
         pcheck,
+        pgver = 0 + XT.Data.getPgVersion(2),
         pid = options.pid || null,
-        pidSql = "select usename, procpid " +
+        pidcol = (pgver < 9.2) ? "procpid" : "pid",
+        pidSql = "select usename, {pidcol} " +
                  "from pg_stat_activity " +
                  "where datname=current_database() " +
                  " and usename=$1 " +
-                 " and procpid=$2;",
+                 " and {pidcol}=$2;",
         query,
         selectSql = "select * " +
                     "from xt.lock " +
@@ -2412,6 +2439,8 @@ select xt.install_js('XT','Data','xtuple', $$
                     " and lock_record_id = $2;",
         username = XT.username;
 
+      pidSql = pidSql.replace(/{pidcol}/g, pidcol);
+
       /* If passed a table name, look up the oid. */
       oid = typeof table === "string" ? this.getTableOid(table) : table;
 
index ee2121b..b8ae265 100644 (file)
@@ -139,7 +139,10 @@ install_packages() {
   sudo add-apt-repository -y "deb http://apt.postgresql.org/pub/repos/apt/ ${DEBDIST}-pgdg main"
   sudo wget -qO- https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
   sudo apt-get -qq update 2>&1 | tee -a $LOG_FILE
-  sudo apt-get -q -y install curl build-essential libssl-dev postgresql-9.1 postgresql-server-dev-9.1 postgresql-contrib-9.1 postgresql-9.1-plv8 2>&1 | tee -a $LOG_FILE
+  sudo apt-get -q -y install curl build-essential libssl-dev \
+    postgresql-${PG_VERSION} postgresql-server-dev-${PG_VERSION} \
+    postgresql-contrib-${PG_VERSION} postgresql-${PG_VERSION}-plv8 2>&1 \
+    | tee -a $LOG_FILE
 
   if [ ! -d "/usr/local/nvm" ]; then
     sudo rm -f /usr/local/bin/nvm
@@ -154,10 +157,11 @@ install_packages() {
   sudo nvm alias xtuple $NODE_VERSION
 
   # use latest npm
-  npm install -fg npm@1.4.25
+  sudo npm install -fg npm@1.4.25
        # npm no longer supports its self-signed certificates
        log "telling npm to use known registrars..."
        npm config set ca ""
+        sudo chown -R $USER $HOME/.npm
 
   log "installing npm modules..."
   npm install --unsafe-perm 2>&1 | tee -a $LOG_FILE
@@ -189,7 +193,7 @@ setup_postgres() {
                return 1
        fi
 
-       PGDIR=/etc/postgresql/9.1/main
+       PGDIR=/etc/postgresql/${PG_VERSION}/main
 
   log "copying configs..."
        sudo cp $PGDIR/postgresql.conf $PGDIR/postgresql.conf.default
index aa0b85c..8ae4296 100644 (file)
@@ -191,9 +191,8 @@ var  async = require('async'),
           return memo + script;
         }, "");
 
-        // Without this, when we delegate to exec psql the err var will not be set even
-        // on the case of error.
-        allSql = "\\set ON_ERROR_STOP TRUE;\n" + allSql;
+        // Without this, psql runs all input and returns success even if errors occurred
+        allSql = "\\set ON_ERROR_STOP TRUE\n" + allSql;
 
         winston.info("Applying build to database " + spec.database);
         credsClone.database = spec.database;
index b82f1bd..0d32d93 100644 (file)
@@ -1,5 +1,5 @@
-<package id        = "distribution-install-460"
-         version   = "4.7.0Beta"
+<package id        = "distribution-install-470"
+         version   = "4.7.0"
          developer = "xTuple"
          descrip   = "load PostBooks resources"
          updater   = "2.2.4" >
@@ -19,8 +19,8 @@
 
   <prerequisite type = "query"
                 name = "Checking for too-new xTuple ERP database version" >
-    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.7.0';</query>
-    <message>This package may not be applied to a database newer than 4.7.0Beta.
+    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.8.0';</query>
+    <message>This package may not be applied to a database newer than 4.7.0.
     </message>
   </prerequisite>
 
index 9ff6ab6..0518ab7 100644 (file)
@@ -1,5 +1,5 @@
-<package id        = "distribution-upgrade-460"
-         version   = "4.7.0Beta"
+<package id        = "distribution-upgrade-470"
+         version   = "4.7.0"
          developer = "xTuple"
          descrip   = "load PostBooks resources"
          updater   = "2.2.4" >
@@ -19,8 +19,8 @@
 
   <prerequisite type = "query"
                 name = "Checking for too-new xTuple ERP database version" >
-    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.7.0';</query>
-    <message>This package may not be applied to a database newer than 4.7.0Beta.
+    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.8.0';</query>
+    <message>This package may not be applied to a database newer than 4.7.0.
     </message>
   </prerequisite>
 
index 041993b..464f2b8 100644 (file)
@@ -1,5 +1,5 @@
-<package id        = "postbooks-upgrade-460"
-         version   = "4.7.0Beta"
+<package id        = "postbooks-upgrade-470"
+         version   = "4.7.0"
          developer = "xTuple"
          descrip   = "load PostBooks resources"
          updater   = "2.2.4" >
@@ -19,8 +19,8 @@
 
   <prerequisite type = "query"
                 name = "Checking for too-new xTuple ERP database version" >
-    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.7.0';</query>
-    <message>This package may not be applied to a database newer than 4.7.0Beta.
+    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.8.0';</query>
+    <message>This package may not be applied to a database newer than 4.7.0.
     </message>
   </prerequisite>
 
index b6eb595..3d34014 100644 (file)
@@ -1,5 +1,5 @@
-<package id        = "manufacturing-install-460"
-         version   = "4.7.0Beta"
+<package id        = "manufacturing-install-470"
+         version   = "4.7.0"
          developer = "xTuple"
          descrip   = "load PostBooks resources"
          updater   = "2.2.4" >
@@ -19,8 +19,8 @@
 
   <prerequisite type = "query"
                 name = "Checking for too-new xTuple ERP database version" >
-    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.7.0';</query>
-    <message>This package may not be applied to a database newer than 4.7.0Beta.
+    <query>SELECT NOT fetchMetricText('ServerVersion') >= '4.8.0';</query>
+    <message>This package may not be applied to a database newer than 4.7.0.
     </message>
   </prerequisite>
 
index ff787b4..ef6ce2c 100644 (file)
@@ -1,5 +1,5 @@
-<package id        = "manufacturing-upgrade-460"
-         version   = "4.7.0Beta"
+<package id        = "manufacturing-upgrade-470"
+         version   = "4.7.0"
          developer = "xTuple"
          descrip   = "load PostBooks resources"
          updater   = "2.2.4" >
@@ -30,8 +30,8 @@
 
 <prerequisite type = "query"
                name = "Checking for too-new xTuple ERP database version" >
-<query>SELECT NOT fetchMetricText('ServerVersion') >= '4.7.0';</query>
-    <message>This package may not be applied to a database newer than 4.7.0Beta.
+<query>SELECT NOT fetchMetricText('ServerVersion') >= '4.8.0';</query>
+    <message>This package may not be applied to a database newer than 4.7.0.
     </message>
 </prerequisite>