[Groonga-commit] groonga/gcs [master] Add support for the field type "literal" to the DefineIndexField action

Back to archive index

null+****@clear***** null+****@clear*****
2012年 7月 9日 (月) 18:03:42 JST


SHIMODA Hiroshi	2012-07-09 18:03:42 +0900 (Mon, 09 Jul 2012)

  New Revision: 5794f7660149492b9d0954f91c7c8605d6e28a9e
  https://github.com/groonga/gcs/commit/5794f7660149492b9d0954f91c7c8605d6e28a9e

  Log:
    Add support for the field type "literal" to the DefineIndexField action

  Modified files:
    lib/api/2011-02-01/configuration.js
    lib/domain.js

  Modified: lib/api/2011-02-01/configuration.js (+17 -26)
===================================================================
--- lib/api/2011-02-01/configuration.js    2012-07-09 17:54:15 +0900 (fb0ae5c)
+++ lib/api/2011-02-01/configuration.js    2012-07-09 18:03:42 +0900 (6688aea)
@@ -205,6 +205,7 @@ handlers.DefineIndexField = function(database, request, response) {
   var field = domain.getIndexField(fieldName);
 
   var createdAt = new Date();
+  var alterTableName = domain.termsTableName;
   var columnType = field.fieldTypeToColumnType(fieldType);
   try {
     database.commandSync('column_create', {
@@ -214,32 +215,21 @@ handlers.DefineIndexField = function(database, request, response) {
       type: columnType
     });
 
-    switch (fieldType) {
-      case 'text':
-        database.commandSync('column_create', {
-          table: domain.termsTableName,
-          name: field.indexColumnName,
-          flags: Database.INDEX_COLUMN_DEFAULT_FLAGS,
-          type: domain.tableName,
-          source: field.columnName
-        });
-        break;
-
-      case 'uint';
-        database.commandSync('table_create', {
-          name: field.alterTableName,
-          flags: Database.TABLE_HASH_KEY,
-          key_type: columnType
-        });
-        database.commandSync('column_create', {
-          table: field.alterTableName,
-          name: field.indexColumnName,
-          flags: Database.INDEX_COLUMN_DEFAULT_FLAGS,
-          type: domain.tableName,
-          source: field.columnName
-        });
-        break;
+    if (fieldType == 'uint' || fieldType == 'literal') {
+      database.commandSync('table_create', {
+        name: field.alterTableName,
+        flags: Database.TABLE_HASH_KEY,
+        key_type: field.fieldTypeToAlterTableKeyType(fieldType)
+      });
+      alterTableName = field.alterTableName;
     }
+    database.commandSync('column_create', {
+      table: alterTableName,
+      name: field.indexColumnName,
+      flags: Database.INDEX_COLUMN_DEFAULT_FLAGS,
+      type: domain.tableName,
+      source: field.columnName
+    });
 
     response.contentType('application/xml');
     response.send(createDefineIndexFieldResponse({
@@ -285,7 +275,8 @@ handlers.DeleteIndexField = function(database, request, response) {
       name: field.columnName
     });
 
-    if (column.type == field.fieldTypeToColumnType('uint')) {
+    if (column.type == field.fieldTypeToColumnType('uint') ||
+        column.type == field.fieldTypeToColumnType('literal')) {
       database.commandSync('table_remove', {
         name: field.alterTableName
       });

  Modified: lib/domain.js (+11 -0)
===================================================================
--- lib/domain.js    2012-07-09 17:54:15 +0900 (2f419be)
+++ lib/domain.js    2012-07-09 18:03:42 +0900 (8e9a1b6)
@@ -167,6 +167,17 @@ IndexField.prototype = {
       default:
         throw new Error('Unsupported index field type '+fieldType);
     }
+  },
+  fieldTypeToAlterTableKeyType: function(fieldType) {
+    switch (fieldType) {
+      case 'uint':
+        return Database.UInt32;
+      case 'literal':
+        return Database.ShortText;
+      default:
+        throw new Error('Unsupported index field type '+fieldType+
+                        ' for alter table');
+    }
   }
 };
 
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
下载 



Groonga-commit メーリングリストの案内
Back to archive index