init.sql 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  1. /*
  2. * Master language table.
  3. *
  4. * Overview of languages available in Scriptshifter.
  5. */
  6. CREATE TABLE tbl_language (
  7. id INTEGER PRIMARY KEY,
  8. name TEXT UNIQUE,
  9. label TEXT,
  10. marc_code TEXT,
  11. description TEXT,
  12. features TINYINT DEFAULT 0
  13. );
  14. /*
  15. * Transliteration maps.
  16. *
  17. * Each row is a S2R or R2S pair associated with a language ID.
  18. */
  19. CREATE TABLE tbl_trans_map (
  20. id INTEGER PRIMARY KEY,
  21. lang_id INTEGER NOT NULL,
  22. dir TINYINT NOT NULL DEFAULT 0, /* 1 = S2R; 2 = R2S */
  23. src TEXT NOT NULL,
  24. dest TEXT,
  25. sort INT NOT NULL, /* Smaller values have higher priority. */
  26. FOREIGN KEY (lang_id) REFERENCES tbl_language(id) ON DELETE CASCADE
  27. );
  28. CREATE UNIQUE INDEX idx_trans_lookup ON tbl_trans_map (lang_id, dir, src);
  29. CREATE INDEX idx_trans_map_sort ON tbl_trans_map (sort ASC);
  30. /*
  31. * Processing hooks.
  32. *
  33. * Note that multiple functions may be grouped under the same hook, lang, and
  34. * direction. These are ordered by `sort`.
  35. */
  36. CREATE TABLE tbl_hook (
  37. id INTEGER PRIMARY KEY,
  38. lang_id INTEGER NOT NULL,
  39. dir TINYINT NOT NULL DEFAULT 0, /* 1 = S2R; 2 = R2S */
  40. name TEXT NOT NULL, /* Hook name. */
  41. sort INT NOT NULL, /* Function sorting order within the hook. */
  42. module TEXT NOT NULL, /* Module name. */
  43. fn TEXT NOT NULL, /* Function name. */
  44. kwargs TEXT, /* KW arguments as JSON blob. */
  45. FOREIGN KEY (lang_id) REFERENCES tbl_language(id) ON DELETE CASCADE
  46. );
  47. CREATE INDEX idx_hook_lookup ON tbl_hook (lang_id, dir);
  48. CREATE INDEX idx_hookname_lookup ON tbl_hook (name);
  49. CREATE INDEX idx_hook_sort ON tbl_hook (sort ASC);
  50. /*
  51. * Ignore lists for R2S.
  52. */
  53. CREATE TABLE tbl_ignore (
  54. id INTEGER PRIMARY KEY,
  55. lang_id INTEGER NOT NULL,
  56. rule TEXT NOT NULL,
  57. features TINYINT, /* 1 = case insensitive; 2 = regular expression. */
  58. FOREIGN KEY (lang_id) REFERENCES tbl_language(id) ON DELETE CASCADE
  59. );
  60. /*
  61. * Double capitals.
  62. */
  63. CREATE TABLE tbl_double_cap (
  64. id INTEGER PRIMARY KEY,
  65. lang_id INTEGER NOT NULL,
  66. rule TEXT NOT NULL,
  67. FOREIGN KEY (lang_id) REFERENCES tbl_language(id) ON DELETE CASCADE
  68. );
  69. /*
  70. * Normalization rules.
  71. */
  72. CREATE TABLE tbl_normalize (
  73. id INTEGER PRIMARY KEY,
  74. lang_id INTEGER NOT NULL,
  75. src TEXT NOT NULL,
  76. dest TEXT NOT NULL,
  77. FOREIGN KEY (lang_id) REFERENCES tbl_language(id) ON DELETE CASCADE
  78. );
  79. /*
  80. * Input options.
  81. */
  82. CREATE TABLE tbl_option (
  83. id INTEGER PRIMARY KEY,
  84. lang_id INTEGER NOT NULL,
  85. name TEXT NOT NULL,
  86. label TEXT NOT NULL,
  87. description TEXT,
  88. dtype TEXT,
  89. options TEXT,
  90. default_v TEXT,
  91. FOREIGN KEY (lang_id) REFERENCES tbl_language(id) ON DELETE CASCADE
  92. );
  93. CREATE UNIQUE INDEX idx_option_lookup ON tbl_option (lang_id, name);