diff options
author | Tom Lane | 2011-02-13 18:38:05 +0000 |
---|---|---|
committer | Tom Lane | 2011-02-14 03:54:43 +0000 |
commit | e693e97d754ed6812ea115170afeae4bf8797d3f (patch) | |
tree | c504e4f71d734f8825f0cff505bdb83bc6dbc1cc /src/backend/commands/extension.c | |
parent | 27d5d7ab10086d833e3df251951cf63c392b8bca (diff) |
Support replacing MODULE_PATHNAME during extension script file execution.
This avoids the need to find a way to make PGXS' .sql.in-to-.sql rule
insert the right thing. We'll just deprecate use of that hack for
extensions.
Diffstat (limited to 'src/backend/commands/extension.c')
-rw-r--r-- | src/backend/commands/extension.c | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/src/backend/commands/extension.c b/src/backend/commands/extension.c index 0661303fea3..92edcbc3cf2 100644 --- a/src/backend/commands/extension.c +++ b/src/backend/commands/extension.c @@ -65,6 +65,7 @@ typedef struct ExtensionControlFile char *name; /* name of the extension */ char *directory; /* directory for script files */ char *default_version; /* default install target version, if any */ + char *module_pathname; /* string to substitute for MODULE_PATHNAME */ char *comment; /* comment, if any */ char *schema; /* target schema (allowed if !relocatable) */ bool relocatable; /* is ALTER EXTENSION SET SCHEMA supported? */ @@ -493,6 +494,10 @@ parse_extension_control_file(ExtensionControlFile *control, control->default_version = pstrdup(item->value); } + else if (strcmp(item->name, "module_pathname") == 0) + { + control->module_pathname = pstrdup(item->value); + } else if (strcmp(item->name, "comment") == 0) { control->comment = pstrdup(item->value); @@ -836,7 +841,20 @@ execute_extension_script(Oid extensionOid, ExtensionControlFile *control, CStringGetTextDatum(sql), CStringGetTextDatum("@extschema@"), CStringGetTextDatum(qSchemaName)))); + } + /* + * If module_pathname was set in the control file, substitute its + * value for occurrences of MODULE_PATHNAME. + */ + if (control->module_pathname) + { + sql = text_to_cstring( + DatumGetTextPP( + DirectFunctionCall3(replace_text, + CStringGetTextDatum(sql), + CStringGetTextDatum("MODULE_PATHNAME"), + CStringGetTextDatum(control->module_pathname)))); } execute_sql_string(sql, filename); |