漢数字型 version 1.0
とりあえず比較演算子の定義と、演算子クラスの実装まではできた。
これで、WHERE句とORDER BY、そしてB-Treeインデクスまでは使えるようになった。
まずはめでたしめでたし。
あとは型変換定義かな・・・
DROP TABLE ksj_sample; DROP TABLE DROP EXTENSION ksj; DROP EXTENSION CREATE EXTENSION ksj; CREATE EXTENSION CREATE TABLE ksj_sample (data ksj); CREATE TABLE INSERT INTO ksj_sample VALUES ('五百拾六'),('零'),('弐万百壱'); INSERT 0 3 SELECT * FROM ksj_sample; data ------------ 五百壱拾六 零 参万壱百壱 (3 rows) SELECT data, data + '拾' FROM ksj_sample; data | ?column? ------------+---------------- 五百壱拾六 | 五百弐拾六 零 | 壱拾 参万壱百壱 | 参万壱百壱拾壱 (3 rows) SELECT data, data * '拾' FROM ksj_sample; data | ?column? ------------+-------------- 五百壱拾六 | 五千壱百六拾 零 | 零 参万壱百壱 | 参拾壱千壱拾 (3 rows) SELECT data, data / '拾' FROM ksj_sample; data | ?column? ------------+---------- 五百壱拾六 | 五拾壱 零 | 零 参万壱百壱 | 参千壱拾 (3 rows) SELECT data, data % '拾' FROM ksj_sample; data | ?column? ------------+---------- 五百壱拾六 | 六 零 | 零 参万壱百壱 | 壱 (3 rows) SELECT sum(data) FROM ksj_sample; sum ---------------- 参万六百壱拾七 (1 row) SELECT max(data) FROM ksj_sample; max ------------ 参万壱百壱 (1 row) SELECT min(data) FROM ksj_sample; min ----- 零 (1 row) SELECT * FROM ksj_sample WHERE data = '五百拾六'; data ------------ 五百壱拾六 (1 row) SELECT * FROM ksj_sample WHERE data <> '五百拾六'; data ------------ 零 参万壱百壱 (2 rows) SELECT * FROM ksj_sample WHERE data < '五百拾六'; data ------ 零 (1 row) SELECT * FROM ksj_sample WHERE data > '五百拾六'; data ------------ 参万壱百壱 (1 row) SELECT * FROM ksj_sample WHERE data <= '五百拾六'; data ------------ 五百壱拾六 零 (2 rows) SELECT * FROM ksj_sample WHERE data >= '五百拾六'; data ------------ 五百壱拾六 参万壱百壱 (2 rows) SELECT * FROM ksj_sample ORDER BY data; data ------------ 零 五百壱拾六 参万壱百壱 (3 rows) SELECT * FROM ksj_sample ORDER BY data DESC; data ------------ 参万壱百壱 五百壱拾六 零 (3 rows) CREATE INDEX ksj_idx ON ksj_sample (data); CREATE INDEX SET enable_seqscan = off; SET EXPLAIN SELECT data FROM ksj_sample WHERE data = '五百拾六'; QUERY PLAN --------------------------------------------------------------------------- Index Scan using ksj_idx on ksj_sample (cost=0.00..12.29 rows=2 width=4) Index Cond: (data = '五百壱拾六'::ksj) (2 rows)