diff options
author | Steven G. Johnson <stevenj@mit.edu> | 2014-07-15 15:32:53 -0400 |
---|---|---|
committer | Steven G. Johnson <stevenj@mit.edu> | 2014-07-15 15:33:52 -0400 |
commit | c0f2b512a055c667cb751ef4526ea744f2428826 (patch) | |
tree | c3f1e8ec8c857026c5fbffa9305596a62388be11 /pgsql | |
parent | ab9520d18845248ef79ee98e8d671f8eecfec288 (diff) | |
download | libutf8proc-c0f2b512a055c667cb751ef4526ea744f2428826.tar.gz libutf8proc-c0f2b512a055c667cb751ef4526ea744f2428826.tar.bz2 |
rm ruby and pgsql plugins: keep libutf8proc repo focused exclusively on the C library
Diffstat (limited to 'pgsql')
-rw-r--r-- | pgsql/Makefile | 10 | ||||
-rw-r--r-- | pgsql/utf8proc.sql | 6 | ||||
-rw-r--r-- | pgsql/utf8proc_pgsql.c | 139 |
3 files changed, 0 insertions, 155 deletions
diff --git a/pgsql/Makefile b/pgsql/Makefile deleted file mode 100644 index f2888f0..0000000 --- a/pgsql/Makefile +++ /dev/null @@ -1,10 +0,0 @@ -utf8proc_pgsql.so: utf8proc_pgsql.o - ld -shared -o utf8proc_pgsql.so utf8proc_pgsql.o - -utf8proc_pgsql.o: utf8proc_pgsql.c - gcc -Wall -fpic -c -I`pg_config --includedir-server` \ - -o utf8proc_pgsql.o utf8proc_pgsql.c - -clean: - rm -f *.o *.so - diff --git a/pgsql/utf8proc.sql b/pgsql/utf8proc.sql deleted file mode 100644 index 605c646..0000000 --- a/pgsql/utf8proc.sql +++ /dev/null @@ -1,6 +0,0 @@ -CREATE OR REPLACE FUNCTION unifold (text) RETURNS text - LANGUAGE 'c' IMMUTABLE STRICT AS '$libdir/utf8proc_pgsql.so', - 'utf8proc_pgsql_unifold'; -CREATE OR REPLACE FUNCTION unistrip (text) RETURNS text - LANGUAGE 'c' IMMUTABLE STRICT AS '$libdir/utf8proc_pgsql.so', - 'utf8proc_pgsql_unistrip'; diff --git a/pgsql/utf8proc_pgsql.c b/pgsql/utf8proc_pgsql.c deleted file mode 100644 index b33795a..0000000 --- a/pgsql/utf8proc_pgsql.c +++ /dev/null @@ -1,139 +0,0 @@ -/* - * Copyright (c) Public Software Group e. V., Berlin, Germany - * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - */ - - -/* - * File name: pgsql/utf8proc_pgsql.c - * - * Description: - * PostgreSQL extension to provide two functions 'unifold' and 'unistrip', - * which can be used to case-fold and normalize index fields and - * optionally strip marks (e.g. accents) from strings. - */ - - -#include "../utf8proc.c" - -#include <postgres.h> -#include <utils/elog.h> -#include <fmgr.h> -#include <string.h> -#include <unistd.h> -#include <utils/builtins.h> - -#ifdef PG_MODULE_MAGIC -PG_MODULE_MAGIC; -#endif - -#define UTF8PROC_PGSQL_FOLD_OPTS ( UTF8PROC_REJECTNA | UTF8PROC_COMPAT | \ - UTF8PROC_COMPOSE | UTF8PROC_STABLE | UTF8PROC_IGNORE | UTF8PROC_STRIPCC | \ - UTF8PROC_NLF2LF | UTF8PROC_CASEFOLD | UTF8PROC_LUMP ) -#define UTF8PROC_PGSQL_STRIP_OPTS ( UTF8PROC_REJECTNA | UTF8PROC_COMPAT | \ - UTF8PROC_COMPOSE | UTF8PROC_STABLE | UTF8PROC_IGNORE | UTF8PROC_STRIPCC | \ - UTF8PROC_NLF2LF | UTF8PROC_CASEFOLD | UTF8PROC_LUMP | UTF8PROC_STRIPMARK ) - -ssize_t utf8proc_pgsql_utf8map( - text *input_string, text **output_string_ptr, int options -) { - ssize_t result; - text *output_string; - result = utf8proc_decompose( - VARDATA(input_string), VARSIZE(input_string) - VARHDRSZ, - NULL, 0, options - ); - if (result < 0) return result; - if (result > (SIZE_MAX-1-VARHDRSZ)/sizeof(int32_t)) - return UTF8PROC_ERROR_OVERFLOW; - /* reserve one extra byte for termination */ - *output_string_ptr = palloc(result * sizeof(int32_t) + 1 + VARHDRSZ); - output_string = *output_string_ptr; - if (!output_string) return UTF8PROC_ERROR_NOMEM; - result = utf8proc_decompose( - VARDATA(input_string), VARSIZE(input_string) - VARHDRSZ, - (int32_t *)VARDATA(output_string), result, options - ); - if (result < 0) return result; - result = utf8proc_reencode( - (int32_t *)VARDATA(output_string), result, options - ); - if (result >= 0) SET_VARSIZE(output_string, result + VARHDRSZ); - return result; -} - -void utf8proc_pgsql_utf8map_errchk(ssize_t result, text *output_string) { - if (result < 0) { - int sqlerrcode; - if (output_string) pfree(output_string); - switch(result) { - case UTF8PROC_ERROR_NOMEM: - sqlerrcode = ERRCODE_OUT_OF_MEMORY; break; - case UTF8PROC_ERROR_OVERFLOW: - sqlerrcode = ERRCODE_PROGRAM_LIMIT_EXCEEDED; break; - case UTF8PROC_ERROR_INVALIDUTF8: - case UTF8PROC_ERROR_NOTASSIGNED: - return; - default: - sqlerrcode = ERRCODE_INTERNAL_ERROR; - } - ereport(ERROR, ( - errcode(sqlerrcode), - errmsg("%s", utf8proc_errmsg(result)) - )); - } -} - -PG_FUNCTION_INFO_V1(utf8proc_pgsql_unifold); -Datum utf8proc_pgsql_unifold(PG_FUNCTION_ARGS) { - text *input_string; - text *output_string = NULL; - ssize_t result; - input_string = PG_GETARG_TEXT_P(0); - result = utf8proc_pgsql_utf8map( - input_string, &output_string, UTF8PROC_PGSQL_FOLD_OPTS - ); - PG_FREE_IF_COPY(input_string, 0); - utf8proc_pgsql_utf8map_errchk(result, output_string); - if (result >= 0) { - PG_RETURN_TEXT_P(output_string); - } else { - PG_RETURN_NULL(); - } -} - -PG_FUNCTION_INFO_V1(utf8proc_pgsql_unistrip); -Datum utf8proc_pgsql_unistrip(PG_FUNCTION_ARGS) { - text *input_string; - text *output_string = NULL; - ssize_t result; - input_string = PG_GETARG_TEXT_P(0); - result = utf8proc_pgsql_utf8map( - input_string, &output_string, UTF8PROC_PGSQL_STRIP_OPTS - ); - PG_FREE_IF_COPY(input_string, 0); - utf8proc_pgsql_utf8map_errchk(result, output_string); - if (result >= 0) { - PG_RETURN_TEXT_P(output_string); - } else { - PG_RETURN_NULL(); - } -} - |