私は参照name
しdescription
ていて、テーブルuser_id
の列です。meta
2回、そしておそらくそれ以上(誰が知っていますか?) 将来的に. これらの列は、メタ リソースの ETag を計算するために使用されます。
将来 ETag の計算に寄与する列を 1 つ追加すると、コードを N 回変更する必要があり、これは悪いことです。
DRY にしてこれらの列名を別の場所に保存する方法はありますか? INSERT
これらの列名は、 on meta を実行するときにも使用したいためです。
IF only = true THEN
-- Calculate ETag on meta fields only
UPDATE meta
SET etag = etag(CONCAT(name, description, user_id))
WHERE id = meta_id;
ELSE
-- Calculate Etag on meta fields and meta customers
BEGIN
DECLARE c_etags VARCHAR(32);
-- Compute c_etags
UPDATE meta
SET etag = etag(CONCAT(etag(name, description, user_id), c_etags))
WHERE id = meta_id;
END;
END IF;
免責事項: このコードはテストされていません。単純なステートメントを除いて、私は MySQL にかなり慣れていません。
EDIT : MySQL 関数ですetag
。MD5
多分これは1つのオプションです:
CREATE PROCEDURE set_meta_etag(IN meta_id INT, IN related TEXT)
NOT DETERMINISTIC
BEGIN
UPDATE meta
SET etag = etag(CONCAT(name, description, user_id,
IF(related IS NOT NULL, related, '')))
WHERE id = meta_id;
END //
-- First call
CALL set_meta_etag(meta_id, NULL);
-- Second call
CALL set_meta_etag(meta_id, c_etags);
INSERT
しかし、それはステートメントには機能しません。