Skip to content

Commit 719659a

Browse files
committed
separate out table definitions to own module, some cleanup around their naming and creation
1 parent 4885929 commit 719659a

File tree

1 file changed

+113
-0
lines changed

1 file changed

+113
-0
lines changed

rdflib_sqlalchemy/tables.py

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
from rdflib.graph import Graph, QuotedGraph
2+
from rdflib.term import Node
3+
from six import text_type
4+
from sqlalchemy import Column, Table, Index, types
5+
6+
7+
MYSQL_MAX_INDEX_LENGTH = 200
8+
9+
TABLE_NAME_TEMPLATES = [
10+
"{}_asserted_statements",
11+
"{}_type_statements",
12+
"{}_quoted_statements",
13+
"{}_namespace_binds",
14+
"{}_literal_statements"
15+
]
16+
17+
18+
class TermType(types.TypeDecorator):
19+
"""Term typology."""
20+
21+
impl = types.Text
22+
23+
def process_bind_param(self, value, dialect):
24+
"""Process bound parameters."""
25+
if isinstance(value, (QuotedGraph, Graph)):
26+
return text_type(value.identifier)
27+
elif isinstance(value, Node):
28+
return text_type(value)
29+
else:
30+
return value
31+
32+
33+
def create_asserted_statements_table(interned_id, metadata):
34+
return Table(
35+
"{}_asserted_statements".format(interned_id),
36+
metadata,
37+
Column("id", types.Integer, nullable=False, primary_key=True),
38+
Column("subject", TermType, nullable=False),
39+
Column("predicate", TermType, nullable=False),
40+
Column("object", TermType, nullable=False),
41+
Column("context", TermType, nullable=False),
42+
Column("termcomb", types.Integer, nullable=False, key="termComb"),
43+
Index("{}_A_termComb_index".format(interned_id), "termComb"),
44+
Index("{}_A_s_index".format(interned_id), "subject", mysql_length=MYSQL_MAX_INDEX_LENGTH),
45+
Index("{}_A_p_index".format(interned_id), "predicate", mysql_length=MYSQL_MAX_INDEX_LENGTH),
46+
Index("{}_A_o_index".format(interned_id), "object", mysql_length=MYSQL_MAX_INDEX_LENGTH),
47+
Index("{}_A_c_index".format(interned_id), "context", mysql_length=MYSQL_MAX_INDEX_LENGTH)
48+
)
49+
50+
51+
def create_type_statements_table(interned_id, metadata):
52+
return Table(
53+
"{}_type_statements".format(interned_id),
54+
metadata,
55+
Column("id", types.Integer, nullable=False, primary_key=True),
56+
Column("member", TermType, nullable=False),
57+
Column("klass", TermType, nullable=False),
58+
Column("context", TermType, nullable=False),
59+
Column("termcomb", types.Integer, nullable=False, key="termComb"),
60+
Index("{}_T_termComb_index".format(interned_id), "termComb"),
61+
Index("{}_member_index".format(interned_id), "member", mysql_length=MYSQL_MAX_INDEX_LENGTH),
62+
Index("{}_klass_index".format(interned_id), "klass", mysql_length=MYSQL_MAX_INDEX_LENGTH),
63+
Index("{}_c_index".format(interned_id), "context", mysql_length=MYSQL_MAX_INDEX_LENGTH)
64+
)
65+
66+
67+
def create_literal_statements_table(interned_id, metadata):
68+
return Table(
69+
"{}_literal_statements".format(interned_id),
70+
metadata,
71+
Column("id", types.Integer, nullable=False, primary_key=True),
72+
Column("subject", TermType, nullable=False),
73+
Column("predicate", TermType, nullable=False),
74+
Column("object", TermType),
75+
Column("context", TermType, nullable=False),
76+
Column("termcomb", types.Integer, nullable=False, key="termComb"),
77+
Column("objlanguage", types.String(255), key="objLanguage"),
78+
Column("objdatatype", types.String(255), key="objDatatype"),
79+
Index("{}_L_termComb_index".format(interned_id), "termComb"),
80+
Index("{}_L_s_index".format(interned_id), "subject", mysql_length=MYSQL_MAX_INDEX_LENGTH),
81+
Index("{}_L_p_index".format(interned_id), "predicate", mysql_length=MYSQL_MAX_INDEX_LENGTH),
82+
Index("{}_L_c_index".format(interned_id), "context", mysql_length=MYSQL_MAX_INDEX_LENGTH)
83+
)
84+
85+
86+
def create_quoted_statements_table(interned_id, metadata):
87+
return Table(
88+
"{}_quoted_statements".format(interned_id),
89+
metadata,
90+
Column("id", types.Integer, nullable=False, primary_key=True),
91+
Column("subject", TermType, nullable=False),
92+
Column("predicate", TermType, nullable=False),
93+
Column("object", TermType),
94+
Column("context", TermType, nullable=False),
95+
Column("termcomb", types.Integer, nullable=False, key="termComb"),
96+
Column("objlanguage", types.String(255), key="objLanguage"),
97+
Column("objdatatype", types.String(255), key="objDatatype"),
98+
Index("{}_Q_termComb_index".format(interned_id), "termComb"),
99+
Index("{}_Q_s_index".format(interned_id), "subject", mysql_length=MYSQL_MAX_INDEX_LENGTH),
100+
Index("{}_Q_p_index".format(interned_id), "predicate", mysql_length=MYSQL_MAX_INDEX_LENGTH),
101+
Index("{}_Q_o_index".format(interned_id), "object", mysql_length=MYSQL_MAX_INDEX_LENGTH),
102+
Index("{}_Q_c_index".format(interned_id), "context", mysql_length=MYSQL_MAX_INDEX_LENGTH)
103+
)
104+
105+
106+
def create_namespace_binds_table(interned_id, metadata):
107+
return Table(
108+
"{}_namespace_binds".format(interned_id),
109+
metadata,
110+
Column("prefix", types.String(20), unique=True, nullable=False, primary_key=True),
111+
Column("uri", types.Text),
112+
Index("{}_uri_index".format(interned_id), "uri", mysql_length=MYSQL_MAX_INDEX_LENGTH)
113+
)

0 commit comments

Comments
 (0)