1<?xml version="1.0" encoding="UTF-8"?>
2<!--
3   Tests databases schema
4-->
5
6
7<schema>
8  <!-- provider specific information
9       use <replace> to replace something with something else (context can only be "/FIELDS_A/@COLUMN_TYPE" at the moment)
10       use <ignore> to ignore some parts (context can only be "/FKEY_S" or "/FIELDS_A/@COLUMN_PKEY" at the moment)
11    -->
12  <specifics>
13    <provider name="PostgreSQL">
14      <replace context="/FIELDS_A/@COLUMN_TYPE" expr="string" replace_with="varchar"/>
15      <replace context="/FIELDS_A/@COLUMN_TYPE" expr="gint" replace_with="int"/>
16    </provider>
17
18    <provider name="MySQL">
19      <replace context="/FIELDS_A/@COLUMN_TYPE" expr="string" replace_with="text"/>
20      <replace context="/FIELDS_A/@COLUMN_TYPE" expr="gint" replace_with="int"/>
21      <ignore context="/FKEY_S"/>
22      <ignore context="/FIELDS_A/@COLUMN_PKEY"/>
23    </provider>
24
25    <provider name="SQLite">
26      <replace context="/FIELDS_A/@COLUMN_TYPE" expr="gint" replace_with="int"/>
27    </provider>
28  </specifics>
29
30  <!-- actor table -->
31  <table name="actor"> <!-- possibly also schema attribute -->
32    <column name="actor_id" type="gint" pkey="TRUE" autoinc="TRUE"/>
33    <column name="first_name"/>
34    <column name="last_name"/>
35    <column name="last_update" type="timestamp">
36      <default symbolic="now"/>
37    </column>
38  </table>
39
40  <!-- film table -->
41  <table name="film">
42    <column name="film_id" type="gint" pkey="TRUE" autoinc="TRUE"/>
43    <column name="title"/>
44    <column name="description" type="date"/>
45    <column name="language_id" type="gint"/>
46    <column name="original_language_id" type="gint" nullok="TRUE"/>
47    <column name="rental_duration" type="smallint">
48      <extra context="COLUMN_DEFAULT">3</extra>
49    </column>
50    <column name="rental_rate" type="numeric(4,2)">
51      <extra context="COLUMN_DEFAULT">4.99</extra>
52    </column>
53    <column name="replacement_cost" type="numeric(5,2)">
54      <extra context="COLUMN_DEFAULT">19.99</extra>
55    </column>
56    <column name="rating" nullok="TRUE">
57      <extra context="COLUMN_DEFAULT">G</extra>
58    </column>
59    <column name="special_features" type="[string]"/>
60    <column name="last_update" type="timestamp">
61      <provider name="SQLite">
62	<extra context="COLUMN_DEFAULT">CURRENT_TIMESTAMP</extra>
63      </provider>
64      <provider name="PostgreSQL">
65	<extra context="COLUMN_DEFAULT">now()</extra>
66      </provider>
67    </column>
68
69    <check>((((rating = 'G') OR (rating = 'PG')) OR (rating = 'PG-13')) OR (rating = 'R')) OR (rating = 'NC-17')</check>
70
71    <fkey ref_table="language">
72      <part column="language_id" ref_column="language_id"/>
73    </fkey>
74
75    <fkey ref_table="language">
76      <part column="original_language_id" ref_column="language_id"/>
77    </fkey>
78  </table>
79
80  <!-- film_actor table -->
81  <table name="film_actor">
82    <column name="actor_id" type="gint"/>
83    <column name="film_id" type="gint"/>
84    <column name="last_update" type="timestamp">
85      <default symbolic="now"/>
86    </column>
87
88    <fkey ref_table="actor">
89      <part column="actor_id" ref_column="actor_id"/>
90    </fkey>
91
92    <fkey ref_table="film">
93      <part column="film_id" ref_column="film_id"/>
94    </fkey>
95  </table>
96
97  <!-- language table -->
98  <table name="language">
99    <column name="language_id" type="gint" pkey="TRUE" autoinc="TRUE"/>
100    <column name="name"/>
101    <column name="last_update" type="timestamp">
102      <default symbolic="now"/>
103    </column>
104  </table>
105
106  <!-- dummy table -->
107  <table name="dummy">
108    <column name="name"/>
109    <unique>
110      <column name="name"/>
111    </unique>
112  </table>
113
114  <!-- films_ordered view -->
115  <view name="films_ordered" descr="Ordered list of films">
116    <definition>SELECT * FROM films ORDER BY last_update</definition>
117  </view>
118
119</schema>
120