Got radio silence on this question in -general, and upon reflection I think it 
might be a -hacker level question. I'm not sure who actually implemented PLV8, 
but I think it might take someone at or near that level to answer.

If not, sorry for the noise. Thanks!

If anyone wants to try to reproduce it, replace the snipped out bits using the 
contents of mustache.js from http://github.com/janl/mustache.js and then fiddle 
with my "return" line at the bottom to try to reference any function that's 
defined in that above snipped portion (such as .render()). Here's a sample sql 
call to the full defined pg function, that does work with my hacked up one that 
removes the factory:

SELECT mustache('
    CREATE TABLE {{{ table_name }}} (
        {{{ table_name }}}_id SERIAL PRIMARY KEY
        {{ #cols }}
        , {{{ def }}}
        {{ /cols }}
    );'
    , '{
            "table_name": "my_table"
            , "cols": [ 
                { "def": "t text" }
                , { "def": "i int" }
            ]
       }'
);

--
Jon Erdman (aka StuckMojo)
    PostgreSQL Zealot



Begin forwarded message:

Date: Wed, 5 Nov 2014 17:01:29 -0600
From: Jon Erdman <postgre...@thewickedtribe.net>
To: pgsql-gene...@postgresql.org
Subject: [GENERAL] PLV8  and JS exports / referencing



So, I was trying to use mustache.js in PG by defining a V8 function that 
imports it. Older versions worked fine, but in newer versions they use a class 
factory and I can't figure out how to reference the mustache stuff that it 
creates. Apparently I need to know how our V8 implementation does exports. 

Here's the top of mustache.js with the class factory, and my attempted 
reference at the bottom (the return which gives me undefined reference). I 
tried various invocations and couldn't quite get it. I ended up hacking it up 
to remove the factory and change it to explicitly declare a variable to make it 
work, but I'd like to avoid that if possible.

If anyone wants to try to reproduce it, replace the snipped out bits using the 
contents of mustache.js from http://github.com/janl/mustache.js 

CREATE OR REPLACE FUNCTION mustache(template text, view json)
    RETURNS TEXT
    LANGUAGE plv8
    IMMUTABLE
    STRICT
AS $$

(function (global, factory) {
  if (typeof exports === "object" && exports) {
    factory(exports); // CommonJS
  } else if (typeof define === "function" && define.amd) {
    define(['exports'], factory); // AMD
  } else {
    factory(global.Mustache = {}); // <script>
  }
}(this, function (mustache) {

  var Object_toString = Object.prototype.toString;
  var isArray = Array.isArray || function (object) {
...
... SNIP ...
...
}));

return mustache.render(template, view);
$$;

--
Jon Erdman (aka StuckMojo)
    PostgreSQL Zealot

Attachment: pgpGRkPs9l89w.pgp
Description: PGP signature

Reply via email to