From ec662b58cd7b4b68d4f1056be86b2b382e5ea693 Mon Sep 17 00:00:00 2001 From: Rafa de la Torre Date: Tue, 17 Nov 2015 17:39:15 +0100 Subject: [PATCH] A generic sql-template-renderer --- interface/generate-grant-execute.rb | 50 ------------------- interface/sql-template-renderer | 35 +++++++++++++ interface/templates/grant-execute.erb | 2 +- .../templates/public-function-definition.erb | 12 ++--- 4 files changed, 42 insertions(+), 57 deletions(-) delete mode 100644 interface/generate-grant-execute.rb create mode 100755 interface/sql-template-renderer diff --git a/interface/generate-grant-execute.rb b/interface/generate-grant-execute.rb deleted file mode 100644 index 2cb001f..0000000 --- a/interface/generate-grant-execute.rb +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env ruby - -# A script to automatically generate SQL files from an interface definition. - -require 'csv' -require 'erb' - -GEOCODER_CLIENT_SCHEMA = 'cdb_geocoder_client' -INTERFACE_SOURCE_FILE = 'interface.csv' - -class GrantExecute - TEMPLATE_FILE = 'templates/grant-execute.erb' - - attr_reader :function_signature - - def initialize(function_signature) - @function_signature = function_signature - @template = File.read(TEMPLATE_FILE) - end - - def render - ERB.new(@template).result(binding) - end -end - -class PublicFunctionDefinition - TEMPLATE_FILE = 'templates/public-function-definition.erb' - - attr_reader :function_signature - - def initialize(function_signature) - @function_signature = function_signature - @template = File.read(TEMPLATE_FILE) - end - - def render - ERB.new(@template).result(binding) - end -end - - -CSV.foreach(INTERFACE_SOURCE_FILE, {headers: true}) do |function_signature| - - function_definition = PublicFunctionDefinition.new(function_signature).render - puts function_definition - - - grant = GrantExecute.new(function_signature).render - #puts grant -end diff --git a/interface/sql-template-renderer b/interface/sql-template-renderer new file mode 100755 index 0000000..950a372 --- /dev/null +++ b/interface/sql-template-renderer @@ -0,0 +1,35 @@ +#!/usr/bin/env ruby + +# A script to automatically generate SQL files from an interface definition. +# To be called like this: sql-template-renderer interface.csv templates/sql-template.erb + +require 'csv' +require 'erb' + +class SqlTemplateRenderer + + GEOCODER_CLIENT_SCHEMA = 'cdb_geocoder_client' + + attr_reader :signature + + def initialize(template_file, signature) + @signature = signature + @template = File.read(template_file) + end + + def render + ERB.new(@template).result(binding) + end +end + +if ARGV.length != 2 then + puts "Usage: sql-template-renderer " + exit +end + +interface_source_file = ARGV[0] +template_file = ARGV[1] + +CSV.foreach(interface_source_file, {headers: true}) do |function_signature| + puts SqlTemplateRenderer.new(template_file, function_signature).render +end diff --git a/interface/templates/grant-execute.erb b/interface/templates/grant-execute.erb index c3aaecb..33503b0 100644 --- a/interface/templates/grant-execute.erb +++ b/interface/templates/grant-execute.erb @@ -1 +1 @@ -GRANT EXECUTE ON FUNCTION <%= GEOCODER_CLIENT_SCHEMA %>.<%= function_signature['function_name'] %>(<%= function_signature['argument_data_types'] %>) TO publicuser; \ No newline at end of file +GRANT EXECUTE ON FUNCTION <%= GEOCODER_CLIENT_SCHEMA %>.<%= signature['function_name'] %>(<%= signature['argument_data_types'] %>) TO publicuser; \ No newline at end of file diff --git a/interface/templates/public-function-definition.erb b/interface/templates/public-function-definition.erb index 8bef626..132beac 100644 --- a/interface/templates/public-function-definition.erb +++ b/interface/templates/public-function-definition.erb @@ -4,21 +4,21 @@ -- These are the only ones with permissions to publicuser role -- and should also be the only ones with SECURITY DEFINER -CREATE OR REPLACE FUNCTION <%= GEOCODER_CLIENT_SCHEMA %>.<%= function_signature['function_name'] %> (<%= function_signature['argument_data_types'] %>) -RETURNS <%= function_signature['result_data_type'] %> AS $$ +CREATE OR REPLACE FUNCTION <%= GEOCODER_CLIENT_SCHEMA %>.<%= signature['function_name'] %> (<%= signature['argument_data_types'] %>) +RETURNS <%= signature['result_data_type'] %> AS $$ DECLARE - ret <%= function_signature['result_data_type'] %>; + ret <%= signature['result_data_type'] %>; BEGIN -- TODO: this is to be changed according to the feature doc - SELECT <%= GEOCODER_CLIENT_SCHEMA %>._geocode_admin0_polygon(session_user, txid_current(), <%= function_signature['argument_data_types'] %>) INTO ret; + SELECT <%= GEOCODER_CLIENT_SCHEMA %>._geocode_admin0_polygon(session_user, txid_current(), <%= signature['argument_data_types'] %>) INTO ret; RETURN ret; END; $$ LANGUAGE 'plpgsql' SECURITY DEFINER; -------------------------------------------------------------------------------- -CREATE OR REPLACE FUNCTION <%= GEOCODER_CLIENT_SCHEMA %>._<%= function_signature['function_name'] %> (user_id name, tx_id bigint, <%= function_signature['argument_data_types'] %>) +CREATE OR REPLACE FUNCTION <%= GEOCODER_CLIENT_SCHEMA %>._<%= signature['function_name'] %> (user_id name, tx_id bigint, <%= signature['argument_data_types'] %>) RETURNS Geometry AS $$ CONNECT <%= GEOCODER_CLIENT_SCHEMA %>._server_conn_str(); - SELECT cdb_geocoder_server.<%= function_signature['function_name'] %> (user_id, tx_id, function_signature['argument_data_types']); + SELECT cdb_geocoder_server.<%= signature['function_name'] %> (user_id, tx_id, signature['argument_data_types']); $$ LANGUAGE plproxy;