33import logging
44import sqlite3
55from dataclasses import dataclass
6- from typing import Any , Iterable , List
6+ from typing import Any , Iterable , List , Union
77
88from rdf_sql_bulkloader .loaders .bulkloader import DEFAULT_CHUNK , BulkLoader
99
10+
11+ logger = logging .getLogger (__name__ )
12+
1013COLS = ["subject" , "predicate" , "object" , "value" , "datatype" , "language" ]
1114
1215RDFTAB_INSERT = """
@@ -45,7 +48,22 @@ class SqliteBulkloader(BulkLoader):
4548
4649 connection : Any = None
4750
48- def bulkload (self , path : str , mime_type = None ):
51+ def create_ddl (self ):
52+ """
53+ Create DDL for a given path.
54+
55+ :return:
56+ """
57+ con = self .connection
58+ for ddl_stmt in self .ddl_statements ():
59+ con .execute (ddl_stmt )
60+ con .executemany (f"insert into prefix (prefix,base) values (?,?)" , self .prefix_map .items ())
61+
62+ def load_prefixes (self ):
63+ con = self .connection
64+ raise NotImplementedError
65+
66+ def bulkload (self , paths : Union [str , List [str ]], mime_type = None , create_tables = True ):
4967 """
5068 Bulkloads from a path.
5169
@@ -55,17 +73,28 @@ def bulkload(self, path: str, mime_type=None):
5573 """
5674 con = sqlite3 .connect (self .database_path )
5775 self .connection = con
58- for ddl_stmt in self .ddl_statements ():
59- con .execute (ddl_stmt )
60- con .executemany (f"insert into prefix (prefix,base) values (?,?)" , self .prefix_map .items ())
61- colstr = "," .join (COLS )
62- qs = "," .join (["?" for _ in COLS ])
63- for chunk_it in chunk (self .statements (path , mime_type ), self .batch_size ):
64- tuples = []
65- for t in chunk_it :
66- tuples .append (t )
67- logging .info (f"Loaded { len (tuples )} loaded; { tuples [0 ]} " )
68- con .executemany (f"insert into statement({ colstr } ) values ({ qs } )" , tuples )
69- if self .rdftab_compatibility :
70- con .execute (RDFTAB_INSERT )
71- con .commit ()
76+ if create_tables :
77+ self .create_ddl ()
78+ if not isinstance (paths , list ):
79+ paths = [paths ]
80+ for path in paths :
81+ print (path )
82+ logger .info (f"Loading { path } into { self .database_path } as { mime_type } ..." )
83+ colstr = "," .join (COLS )
84+ qs = "," .join (["?" for _ in COLS ])
85+ for chunk_it in chunk (self .statements (path , mime_type ), self .batch_size ):
86+ tuples = []
87+ for t in chunk_it :
88+ if self .rdftab_compatibility :
89+ tuples .append (t + (t [0 ],))
90+ else :
91+ tuples .append (t )
92+ logging .info (f"Loaded { len (tuples )} loaded; { tuples [0 ]} " )
93+ if self .rdftab_compatibility :
94+ con .executemany (f"insert into statements({ colstr } ,stanza) values ({ qs } ,?)" , tuples )
95+ else :
96+ con .executemany (f"insert into statement({ colstr } ) values ({ qs } )" , tuples )
97+ con .commit ()
98+ #if self.rdftab_compatibility:
99+ # con.execute(RDFTAB_INSERT)
100+
0 commit comments