我是referencigname
和表格description
的user_id
列meta
。未来两次,甚至更多(谁知道?)。这些列用于计算我的元资源的 ETag。
添加一列有助于将来计算 ETag 将迫使我将代码更改 N 次,这很糟糕。
有没有办法让它干燥并将这些列名存储在其他地方?因为我想INSERT
在执行元数据时也使用这些列名。
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 的东西很陌生,除了简单的语句。
编辑:etag
是MD5
MySQL 函数。也许这是一种选择:
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
声明。