null+****@clear*****
null+****@clear*****
2012年 7月 9日 (月) 18:17:53 JST
SHIMODA Hiroshi 2012-07-09 18:17:53 +0900 (Mon, 09 Jul 2012) New Revision: 9192a91be5828f4200286416d7740725fc89dd85 https://github.com/groonga/gcs/commit/9192a91be5828f4200286416d7740725fc89dd85 Log: Support uint and literal fields by the IndexDocuments action Modified files: lib/api/2011-02-01/configuration.js lib/domain.js Modified: lib/api/2011-02-01/configuration.js (+43 -11) =================================================================== --- lib/api/2011-02-01/configuration.js 2012-07-09 18:03:42 +0900 (6688aea) +++ lib/api/2011-02-01/configuration.js 2012-07-09 18:17:53 +0900 (08c8e8e) @@ -315,17 +315,49 @@ handlers.IndexDocuments = function(database, request, response) { }); try { indexColumns.forEach(function(column) { - database.commandSync('column_remove', { - table: domain.termsTableName, - name: column.name - }); - database.commandSync('column_create', { - table: domain.termsTableName, - name: column.name, - flags: Database.INDEX_COLUMN_DEFAULT_FLAGS, - type: column.range, - source: column.source[0].replace(column.range + '.', '') - }); + // FieldNames must be field names, not column names. + // However, original field names are completely lost after + // they are created via the API... + var fieldName = column.source[0].replace(column.range + '.', ''); + var field = domain.getIndexField(fieldName); + + var alterTableName = domain.termsTableName; + var fieldType = field.columnTypeToFieldType(column.type); + + if (column.type == field.fieldTypeToColumnType('uint') || + column.type == field.fieldTypeToColumnType('literal')) { + database.commandSync('column_remove', { + table: field.alterTableName, + name: field.indexColumnName + }); + database.commandSync('table_remove', { + name: field.alterTableName + }); + database.commandSync('table_create', { + name: field.alterTableName, + flags: Database.TABLE_HASH_KEY, + key_type: field.fieldTypeToAlterTableKeyType(fieldType) + }); + database.commandSync('column_create', { + table: field.alterTableName, + name: field.indexColumnName, + flags: Database.INDEX_COLUMN_DEFAULT_FLAGS, + type: domain.tableName, + source: field.columnName + }); + } else { + database.commandSync('column_remove', { + table: domain.termsTableName, + name: field.indexColumnName + }); + database.commandSync('column_create', { + table: domain.termsTableName, + name: field.indexColumnName, + flags: Database.INDEX_COLUMN_DEFAULT_FLAGS, + type: column.range, + source: field.columnName + }); + } }); response.contentType('application/xml'); response.send(createIndexDocumentsResponse({ Modified: lib/domain.js (+12 -0) =================================================================== --- lib/domain.js 2012-07-09 18:03:42 +0900 (8e9a1b6) +++ lib/domain.js 2012-07-09 18:17:53 +0900 (adc3a64) @@ -168,6 +168,18 @@ IndexField.prototype = { throw new Error('Unsupported index field type '+fieldType); } }, + columnTypeToFieldType: function(columnType) { + switch (columnType) { + case Database.ShortText: + return 'text'; + case Database.UInt32: + return 'uint'; + case this.alterTableName: + return 'literal'; + default: + throw new Error('Unsupported column type '+columnType); + } + }, fieldTypeToAlterTableKeyType: function(fieldType) { switch (fieldType) { case 'uint': -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B... 下载