Feature #2277

カラム追加・削除のINPLACE ALTER TABLEへの対応

Added by Kentaro HAYASHI over 3 years ago. Updated about 3 years ago.

Status:完了Start date:02/03/2014
Priority:NormalDue date:
Assignee:-% Done:

100%

Category:-
Target version:-

Description

動機

groonga-devで報告された以下の要望に対応したい。

Subject: [groonga-dev,02035] テーブル参照のインデックスがあるMroongaのテーブルに対するALTER TABLEについて
From: Naoya Murakami 
To: 全文検索エンジンGroonga開発メーリングリスト 
Date: Tue, 7 Jan 2014 12:49:18 +0900

http://sourceforge.jp/projects/groonga/lists/archive/dev/2014-January/002037.html

Mroonga 3.12には入れられなくて先送りした。

ゴール

修正が完了し、groonga-devでの対応完了報告ができていること。

実現方法

再現SQLが提供されているので、まずはそこから。

<再現SQL>
CREATE TABLE Tags (
name VARCHAR(64) PRIMARY KEY
) ENGINE=mroonga DEFAULT CHARSET=utf8
COLLATE=utf8_bin
COMMENT='default_tokenizer "TokenDelimit"';

CREATE TABLE Bugs (
id INT UNSIGNED PRIMARY KEY,
tags VARCHAR(40) COMMENT 'type "Tags", flags "COLUMN_VECTOR"',
FULLTEXT INDEX bugs_tags_index (tags) COMMENT 'table "Tags"'
) ENGINE=mroonga DEFAULT CHARSET=utf8;

ALTER TABLE Bugs ADD ex_tag VARCHAR(40);

History

#1 Updated by Naoya Murakami about 3 years ago

村上と申します。

本件につきまして、ADD COLUMNとDROP COLUMNのIN PLACE ALTER TABLE 対応を追加してみました。

https://github.com/naoa/mroonga/commit/b35de82123582e20d3c8d1d890e8ba7a8304fdb5

test/run-sql-test.shのALTER TABLE関連が通ること(FULLTEXT関連で2件ほどSyntax errorがでてましたが、本件とは関係なさそうです。)、上記の再現SQLおよびDROP COLUMN相当の処理が通ることは確認しています。

Elseの中にいれたため、コミットのdiffがみづらくなっていますが、ADD INDEX周りの処理についてはいじっていません。

ご確認願いますでしょうか?

テストしたMySQLは5.6.14のみです。

#2 Updated by Kouhei Sutou about 3 years ago

ありがとうございます!

syntax errorのやつは関係ないというのであっています。masterのGroongaと一緒にテストするとうまく動くようにしておきました。(リリース版では相変わらず失敗します。)

ちょっと、元のコードのせいでわかりにくコードになっちゃっていますね。。。 お手数なんですけど、元のコードを少し整理したので、masterにrebaseしてもう一度変更を適用してもらえますか?今度はもう少しスッキリ書けるようになっていると思います!

#3 Updated by Naoya Murakami about 3 years ago

村上です。

コードの整理ありがとうございます!整理後のコードに反映しました。ご確認ください。 (すいません、ALTER_COLUMN_ORDERが抜けていて修正しました。)

https://github.com/naoa/mroonga/commit/1d9967c384827c21157ec872e2f39c316aa768cc

ちなみにGroongaをmasterにしてテストしたつもりですが、Syntax errorが発生しました。反映ミスだったらすいません。

-ERROR 42000: failed to parse fulltext search keyword: <(groonga)*>: <Syntax error: <(groonga)|*|>>
+ERROR 42000: failed to parse fulltext search keyword: <(groonga)*>: <Syntax error: <(groonga)*|>>

rename周りはgrn_column_renameがdangerousっていってたのでとりあえずやめときました。inplace_alter_tableの中ってロックされているんですかね?

http://groonga.org/ja/docs/reference/commands/column_rename.html

#4 Updated by Kouhei Sutou about 3 years ago

Naoya Murakami wrote:

コードの整理ありがとうございます!整理後のコードに反映しました。ご確認ください。

ありがとうございます!気になったところにコメントしました!

あと、pull requestにしてもらえますか?マージしやすいので!

ちなみにGroongaをmasterにしてテストしたつもりですが、Syntax errorが発生しました。反映ミスだったらすいません。

これはmasterじゃなくリリース版を使っている時の挙動です!

rename周りはgrn_column_renameがdangerousっていってたのでとりあえずやめときました。inplace_alter_tableの中ってロックされているんですかね?


http://groonga.org/ja/docs/reference/commands/column_rename.html

ha_mroonga::storage_check_if_supported_inplace_alter()HA_ALTER_INPLACE_EXCLUSIVE_LOCK っていうのを返しているのでロックしているような気がします。 SELECT しながら ALTER TABLE RENAME しても落ちないなら大丈夫だと思います!

#5 Updated by Naoya Murakami about 3 years ago

https://github.com/naoa/mroonga/commit/8732bfe2263855566f6ac2a26beede8289645c72#commitcomment-7077104

コメントいただいたのに取り下げてしまいましたね。。すいません。 いただいたコメントを整理できる範囲でちょっと整理して、pull requestにします。

#6 Updated by Kouhei Sutou about 3 years ago

  • Status changed from 新規 to 完了
  • % Done changed from 0 to 100

取り込んだのでクローズします!

Also available in: Atom PDF