created a SQL template, #19
authorDickson S. Guedes <guedes@guedesoft.net>
Sat, 15 Oct 2011 04:30:48 +0000 (01:30 -0300)
committerDickson S. Guedes <guedes@guedesoft.net>
Sat, 15 Oct 2011 04:30:48 +0000 (01:30 -0300)
14 files changed:
META.json
lib/pgxn_utils/cli.rb
lib/pgxn_utils/templates/sql/%extension_name%.control.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/.gitignore.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/.template [new file with mode: 0644]
lib/pgxn_utils/templates/sql/META.json.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/Makefile.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/README.md.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/doc/%extension_name%.md.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/sql/%extension_name%.sql.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/sql/uninstall_%extension_name%.sql [new file with mode: 0644]
lib/pgxn_utils/templates/sql/test/expected/base.out.tt [new file with mode: 0644]
lib/pgxn_utils/templates/sql/test/sql/base.sql.tt [new file with mode: 0644]
lib/pgxn_utils/version.rb

index 5333f12d14dd8f28d14f79744f0a39b53b307e29..d2ae65eeaa3e7dc75503f270d966075e37d88bfc 100644 (file)
--- a/META.json
+++ b/META.json
@@ -1,7 +1,7 @@
 {
    "name": "pgxn_utils",
    "abstract": "pgxn_utils is a development tool to create PostgreSQL extensions",
-   "version": "0.1.3",
+   "version": "0.1.4",
    "maintainer": "Dickson S. Guedes <guedes@guedesoft.net>",
    "license": "postgresql",
    "release_status": "stable",
@@ -14,7 +14,7 @@
    "provides": {
        "pgxn_utils": {
            "file": "pgxn_utils",
-           "version": "0.1.3"
+           "version": "0.1.4"
        }
    },
    "meta-spec": {
index 628b5b7c1ad9f50f58613fa81cb5c574a2c96a08..a7035fe3595ea2f07510c7555a227dd8bf9d3ded 100644 (file)
@@ -62,14 +62,16 @@ module PgxnUtils
     def change(extension_name=".")
       extension_path, extension_name = resolve_extension_path_and_name(extension_name)
 
+     template_type = File.read("#{extension_path}/.template").chomp
+
       self.target = extension_path
       self.extension_name = extension_name
 
       set_accessors(extension_name)
 
       if is_extension?(extension_path)
-        template "root/META.json.tt", "#{extension_path}/META.json"
-        template "root/%extension_name%.control.tt", "#{extension_path}/%extension_name%.control"
+        template "#{template_type}/META.json.tt", "#{extension_path}/META.json"
+        template "#{template_type}/%extension_name%.control.tt", "#{extension_path}/%extension_name%.control"
       else
         say "'#{extension_name}' doesn't appears to be an extension. Please, supply the extension's name", :red
       end
diff --git a/lib/pgxn_utils/templates/sql/%extension_name%.control.tt b/lib/pgxn_utils/templates/sql/%extension_name%.control.tt
new file mode 100644 (file)
index 0000000..a636c44
--- /dev/null
@@ -0,0 +1,4 @@
+# <%= extension_name %> extension
+comment = '<%= abstract %>'
+default_version = '<%= version %>'
+relocatable = true
diff --git a/lib/pgxn_utils/templates/sql/.gitignore.tt b/lib/pgxn_utils/templates/sql/.gitignore.tt
new file mode 100644 (file)
index 0000000..7ccbc9d
--- /dev/null
@@ -0,0 +1,8 @@
+results/
+*.so
+tmp/
+*.o
+regression.diffs
+regression.out
+/sql/<%= extension_name =>--*
+!/sql/<%= extension_name =>--*--*.sql
diff --git a/lib/pgxn_utils/templates/sql/.template b/lib/pgxn_utils/templates/sql/.template
new file mode 100644 (file)
index 0000000..d5ce2f2
--- /dev/null
@@ -0,0 +1 @@
+sql
diff --git a/lib/pgxn_utils/templates/sql/META.json.tt b/lib/pgxn_utils/templates/sql/META.json.tt
new file mode 100644 (file)
index 0000000..75a62d5
--- /dev/null
@@ -0,0 +1,27 @@
+{
+   "name": "<%= extension_name %>",
+   "abstract": "<%= abstract %>",
+   "description": "<%= description %>",
+   "version": "<%= version %>",
+   "maintainer": "<%= maintainer %>",
+   "license": "<%= license %>",
+   "provides": {
+      "<%= extension_name %>": {
+         "abstract": "<%= abstract %>",
+         "file": "sql/<%= extension_name %>.sql",
+         "docfile": "doc/<%= extension_name %>.md",
+         "version": "<%= version %>"
+      }
+   },
+   "release_status": "<%= release_status %>",
+<% if generated_by %>
+   "generated_by": "<%= generated_by %>",
+<% end %>
+<% if tags %>
+   "tags": [ <%= tags.collect { |t| %Q|"#{t}"| }.join(",") %> ],
+<% end %>
+   "meta-spec": {
+      "version": "1.0.0",
+      "url": "http://pgxn.org/meta/spec.txt"
+   }
+}
diff --git a/lib/pgxn_utils/templates/sql/Makefile.tt b/lib/pgxn_utils/templates/sql/Makefile.tt
new file mode 100644 (file)
index 0000000..1028f65
--- /dev/null
@@ -0,0 +1,28 @@
+EXTENSION    = <%= extension_name %>
+EXTVERSION   = $(shell grep default_version $(EXTENSION).control | sed -e "s/default_version[[:space:]]*=[[:space:]]*'\([^']*\)'/\1/")
+
+DATA         = $(filter-out $(wildcard sql/*--*.sql),$(wildcard sql/*.sql))
+DOCS         = $(wildcard doc/*.md)
+TESTS        = $(wildcard test/sql/*.sql)
+REGRESS      = $(patsubst test/sql/%.sql,%,$(TESTS))
+REGRESS_OPTS = --inputdir=test --load-language=plpgsql
+#
+# Uncoment the MODULES line if you are adding C files
+# to your extention.
+#
+#MODULES      = $(patsubst %.c,%,$(wildcard src/*.c))
+PG_CONFIG    = pg_config
+PG91         = $(shell $(PG_CONFIG) --version | grep -qE " 8\.| 9\.0" && echo no || echo yes)
+
+ifeq ($(PG91),yes)
+all: sql/$(EXTENSION)--$(EXTVERSION).sql
+
+sql/$(EXTENSION)--$(EXTVERSION).sql: sql/$(EXTENSION).sql
+   cp $< $@
+
+DATA = $(wildcard sql/*--*.sql) sql/$(EXTENSION)--$(EXTVERSION).sql
+EXTRA_CLEAN = sql/$(EXTENSION)--$(EXTVERSION).sql
+endif
+
+PGXS := $(shell $(PG_CONFIG) --pgxs)
+include $(PGXS)
diff --git a/lib/pgxn_utils/templates/sql/README.md.tt b/lib/pgxn_utils/templates/sql/README.md.tt
new file mode 100644 (file)
index 0000000..dea5186
--- /dev/null
@@ -0,0 +1,80 @@
+<%= extension_name %>
+<%= extension_name.gsub(/./,"=") %>
+
+<%= description %>
+
+To build it, just do this:
+
+    make
+    make installcheck
+    make install
+
+If you encounter an error such as:
+
+    "Makefile", line 8: Need an operator
+
+You need to use GNU make, which may well be installed on your system as
+`gmake`:
+
+    gmake
+    gmake install
+    gmake installcheck
+
+If you encounter an error such as:
+
+    make: pg_config: Command not found
+
+Be sure that you have `pg_config` installed and in your path. If you used a
+package management system such as RPM to install PostgreSQL, be sure that the
+`-devel` package is also installed. If necessary tell the build process where
+to find it:
+
+    env PG_CONFIG=/path/to/pg_config make && make installcheck && make install
+
+And finally, if all that fails (and if you're on PostgreSQL 8.1 or lower, it
+likely will), copy the entire distribution directory to the `contrib/`
+subdirectory of the PostgreSQL source tree and try it there without
+`pg_config`:
+
+    env NO_PGXS=1 make && make installcheck && make install
+
+If you encounter an error such as:
+
+    ERROR:  must be owner of database regression
+
+You need to run the test suite using a super user, such as the default
+"postgres" super user:
+
+    make installcheck PGUSER=postgres
+
+Once <%= extension_name %> is installed, you can add it to a database. If you're running
+PostgreSQL 9.1.0 or greater, it's a simple as connecting to a database as a
+super user and running:
+
+    CREATE EXTENSION <%= extension_name %>;
+
+If you've upgraded your cluster to PostgreSQL 9.1 and already had <%= extension_name %>
+installed, you can upgrade it to a properly packaged extension with:
+
+    CREATE EXTENSION <%= extension_name %> FROM unpackaged;
+
+For versions of PostgreSQL less than 9.1.0, you'll need to run the
+installation script:
+
+    psql -d mydb -f /path/to/pgsql/share/contrib/<%= extension_name %>.sql
+
+If you want to install <%= extension_name %> and all of its supporting objects into a specific
+schema, use the `PGOPTIONS` environment variable to specify the schema, like
+so:
+
+    PGOPTIONS=--search_path=extensions psql -d mydb -f <%= extension_name %>.sql
+
+Dependencies
+------------
+The `<%= extension_name %>` data type has no dependencies other than PostgreSQL.
+
+Copyright and License
+---------------------
+
+Copyright (c) <%= Time.now.strftime("%Y") %> <%= maintainer %>.
+
diff --git a/lib/pgxn_utils/templates/sql/doc/%extension_name%.md.tt b/lib/pgxn_utils/templates/sql/doc/%extension_name%.md.tt
new file mode 100644 (file)
index 0000000..4df92fe
--- /dev/null
@@ -0,0 +1,33 @@
+<%= extension_name %>
+<%= extension_name.gsub(/./,"=") %>
+
+Synopsis
+--------
+
+  Show a brief synopsis of the extension.
+
+Description
+-----------
+
+<%= description %>
+
+Usage
+-----
+
+  Show usage.
+
+Support
+-------
+
+  There is issues tracker? Github? Put this information here.
+
+Author
+------
+
+[<%= maintainer %>]
+
+Copyright and License
+---------------------
+
+Copyright (c) <%= Time.now.strftime("%Y") %> <%= maintainer %>.
+
diff --git a/lib/pgxn_utils/templates/sql/sql/%extension_name%.sql.tt b/lib/pgxn_utils/templates/sql/sql/%extension_name%.sql.tt
new file mode 100644 (file)
index 0000000..39b7ace
--- /dev/null
@@ -0,0 +1,31 @@
+/*
+ * Author: <%= maintainer %>
+ * Created at: <%= Time.now %>
+ *
+ */
+
+--
+-- This is a example code genereted automaticaly
+-- by pgxn-utils.
+
+SET client_min_messages = warning;
+
+-- If your extension will create a type you can
+-- do somenthing like this
+CREATE TYPE <%= extension_name %> AS ( a text, b text );
+
+-- Maybe you want to create some function, so you can use
+-- this as an example
+CREATE OR REPLACE FUNCTION <%= extension_name %> (text, text)
+RETURNS <%= extension_name %> LANGUAGE SQL AS 'SELECT ROW($1, $2)::<%= extension_name %>';
+
+-- Sometimes it is common to use special operators to
+-- work with your new created type, you can create
+-- one like the command bellow if it is applicable
+-- to your case
+
+CREATE OPERATOR #? (
+   LEFTARG   = text,
+   RIGHTARG  = text,
+   PROCEDURE = <%= extension_name %>
+);
diff --git a/lib/pgxn_utils/templates/sql/sql/uninstall_%extension_name%.sql b/lib/pgxn_utils/templates/sql/sql/uninstall_%extension_name%.sql
new file mode 100644 (file)
index 0000000..e0e56ef
--- /dev/null
@@ -0,0 +1,21 @@
+/*
+ * Author: <%= maintainer %>
+ * Created at: <%= Time.now %>
+ *
+ */
+
+--
+-- This is a example code genereted automaticaly
+-- by pgxn-utils.
+
+SET client_min_messages = warning;
+
+BEGIN;
+
+-- You can use this statements as
+-- template for your extension.
+
+DROP OPERATOR #? (text, text);
+DROP FUNCTION <%= extension_name %>(text, text);
+DROP TYPE <%= extension_name %> CASCADE;
+COMMIT;
diff --git a/lib/pgxn_utils/templates/sql/test/expected/base.out.tt b/lib/pgxn_utils/templates/sql/test/expected/base.out.tt
new file mode 100644 (file)
index 0000000..e8f9f4a
--- /dev/null
@@ -0,0 +1,49 @@
+\set ECHO 0
+-- You should write your tests
+SELECT <%= extension_name %>('foo', 'bar');
+ <%= extension_name %> 
+<%= '-' * (extension_name.length + 2) %>
+ (foo,bar)
+(1 row)
+
+SELECT 'foo' #? 'bar' AS arrowop;
+  arrowop  
+-----------
+ (foo,bar)
+(1 row)
+
+CREATE TABLE ab (
+    a_field <%= extension_name %>
+);
+INSERT INTO ab VALUES('foo' #? 'bar');
+SELECT (a_field).a, (a_field).b FROM ab;
+  a  |  b  
+-----+-----
+ foo | bar
+(1 row)
+
+SELECT (<%= extension_name %>('foo', 'bar')).a;
+  a  
+-----
+ foo
+(1 row)
+
+SELECT (<%= extension_name %>('foo', 'bar')).b;
+  b  
+-----
+ bar
+(1 row)
+
+SELECT ('foo' #? 'bar').a;
+  a  
+-----
+ foo
+(1 row)
+
+SELECT ('foo' #? 'bar').b;
+  b  
+-----
+ bar
+(1 row)
+
+ROLLBACK;
diff --git a/lib/pgxn_utils/templates/sql/test/sql/base.sql.tt b/lib/pgxn_utils/templates/sql/test/sql/base.sql.tt
new file mode 100644 (file)
index 0000000..67074e1
--- /dev/null
@@ -0,0 +1,25 @@
+\set ECHO 0
+BEGIN;
+\i sql/<%= extension_name %>.sql
+\set ECHO all
+
+-- You should write your tests
+
+SELECT <%= extension_name %>('foo', 'bar');
+
+SELECT 'foo' #? 'bar' AS arrowop;
+
+CREATE TABLE ab (
+    a_field <%= extension_name %>
+);
+
+INSERT INTO ab VALUES('foo' #? 'bar');
+SELECT (a_field).a, (a_field).b FROM ab;
+
+SELECT (<%= extension_name %>('foo', 'bar')).a;
+SELECT (<%= extension_name %>('foo', 'bar')).b;
+
+SELECT ('foo' #? 'bar').a;
+SELECT ('foo' #? 'bar').b;
+
+ROLLBACK;
index 9fc87d26c6701b37132ef498a9d0f8a14c03a478..d11a510fdb0b749442fe5cd3dc49b405cd12bdd2 100644 (file)
@@ -1,3 +1,3 @@
 module PgxnUtils
-  VERSION = "0.1.3"
+  VERSION = "0.1.4"
 end