Kouhei Sutou
null+****@clear*****
Thu Oct 27 00:47:15 JST 2016
Kouhei Sutou 2016-10-27 00:47:15 +0900 (Thu, 27 Oct 2016) New Revision: 93a76cf0caadcbc3bd324689b370b304d7087248 https://github.com/pgroonga/pgroonga/commit/93a76cf0caadcbc3bd324689b370b304d7087248 Message: Support data + size API Modified files: src/pgrn_column_name.c src/pgrn_column_name.h src/pgrn_groonga.c src/pgrn_groonga.h Modified: src/pgrn_column_name.c (+18 -4) =================================================================== --- src/pgrn_column_name.c 2016-10-25 23:38:54 +0900 (07c6c70) +++ src/pgrn_column_name.c 2016-10-27 00:47:15 +0900 (eb89a59) @@ -41,15 +41,19 @@ checkSize(size_t size) } static size_t -PGrnColumnNameEncodeUTF8(const char *name, char *encodedName) +PGrnColumnNameEncodeUTF8WithSize(const char *name, + size_t nameSize, + char *encodedName) { const char *current; + const char *end; char *encodedCurrent; size_t encodedNameSize = 0; current = name; + end = name + nameSize; encodedCurrent = encodedName; - while (*current != '\0') + while (current < end) { int length; @@ -82,16 +86,26 @@ PGrnColumnNameEncodeUTF8(const char *name, char *encodedName) size_t PGrnColumnNameEncode(const char *name, char *encodedName) { + return PGrnColumnNameEncodeWithSize(name, strlen(name), encodedName); +} + +size_t +PGrnColumnNameEncodeWithSize(const char *name, + size_t nameSize, + char *encodedName) +{ const char *current; + const char *end; char *encodedCurrent; size_t encodedNameSize = 0; if (GetDatabaseEncoding() == PG_UTF8) - return PGrnColumnNameEncodeUTF8(name, encodedName); + return PGrnColumnNameEncodeUTF8WithSize(name, nameSize, encodedName); current = name; + end = name + nameSize; encodedCurrent = encodedName; - while (*current != '\0') + while (current < end) { int length; Modified: src/pgrn_column_name.h (+3 -0) =================================================================== --- src/pgrn_column_name.h 2016-10-25 23:38:54 +0900 (3001024) +++ src/pgrn_column_name.h 2016-10-27 00:47:15 +0900 (f104b87) @@ -1,4 +1,7 @@ #pragma once size_t PGrnColumnNameEncode(const char *name, char *encodedName); +size_t PGrnColumnNameEncodeWithSize(const char *name, + size_t nameSize, + char *encodedName); size_t PGrnColumnNameDecode(const char *encodedName, char *name); Modified: src/pgrn_groonga.c (+12 -3) =================================================================== --- src/pgrn_groonga.c 2016-10-25 23:38:54 +0900 (399c9e1) +++ src/pgrn_groonga.c 2016-10-27 00:47:15 +0900 (7781f85) @@ -81,11 +81,20 @@ PGrnLookup(const char *name, int errorLevel) grn_obj * PGrnLookupColumn(grn_obj *table, const char *name, int errorLevel) { + return PGrnLookupColumnWithSize(table, name, strlen(name), errorLevel); +} + +grn_obj * +PGrnLookupColumnWithSize(grn_obj *table, + const char *name, + size_t nameSize, + int errorLevel) +{ char columnName[GRN_TABLE_MAX_KEY_SIZE]; size_t columnNameSize; grn_obj *column; - columnNameSize = PGrnColumnNameEncode(name, columnName); + columnNameSize = PGrnColumnNameEncodeWithSize(name, nameSize, columnName); column = grn_obj_column(ctx, table, columnName, columnNameSize); if (!column) { @@ -95,9 +104,9 @@ PGrnLookupColumn(grn_obj *table, const char *name, int errorLevel) tableNameSize = grn_obj_name(ctx, table, tableName, sizeof(tableName)); ereport(errorLevel, (errcode(ERRCODE_INVALID_NAME), - errmsg("pgroonga: column isn't found: <%.*s>:<%s>", + errmsg("pgroonga: column isn't found: <%.*s>:<%.*s>", tableNameSize, tableName, - name))); + (int)nameSize, name))); } return column; Modified: src/pgrn_groonga.h (+4 -0) =================================================================== --- src/pgrn_groonga.h 2016-10-25 23:38:54 +0900 (8699ab6) +++ src/pgrn_groonga.h 2016-10-27 00:47:15 +0900 (901a342) @@ -16,6 +16,10 @@ grn_bool PGrnCheck(const char *message); grn_obj *PGrnLookup(const char *name, int errorLevel); grn_obj *PGrnLookupColumn(grn_obj *table, const char *name, int errorLevel); +grn_obj *PGrnLookupColumnWithSize(grn_obj *table, + const char *name, + size_t nameSize, + int errorLevel); grn_obj *PGrnLookupSourcesTable(Relation index, int errorLevel); grn_obj *PGrnLookupSourcesCtidColumn(Relation index, int errorLevel); grn_obj *PGrnLookupLexicon(Relation index, -------------- next part -------------- HTML����������������������������...Download