-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathloaddb.py
More file actions
133 lines (116 loc) · 5.31 KB
/
loaddb.py
File metadata and controls
133 lines (116 loc) · 5.31 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
import math
import sqlite3
from queryexplorer import app, connect_db
from queryutils import get_user_sessions, CommandsIndicatorFeatureVector, Query
from contextlib import closing
BYTES_IN_MB = 1048576
db = None
def init_db():
execute_db_script("basic_schema.sql")
def execute_db_script(script):
with closing(connect_db()) as db:
with app.open_resource(script) as f:
db.cursor().executescript(f.read())
db.commit()
def load_db():
global db
db = connect_db()
load_main()
db.close()
def load_main():
user_id = 1
session_id = 1
query_id = 1
for users in get_user_sessions(limit=800*BYTES_IN_MB):
for user in users:
print "loaded user"
insert_user(user_id, user.name)
for (local_sid, session) in user.sessions.iteritems():
insert_session(session_id, user_id)
for query in session.queries:
insert_query(query_id, query.text, query.time, False, user_id, session_id=session_id)
query_id += 1
session_id += 1
for query in user.autorecurring_queries:
insert_query(query_id, query.text, query.time, True, user_id)
query_id += 1
user_id += 1
def load_commands_indicator_features_table():
# load queries
#commands_indicator_feature_id = 1
# vector = CommandsIndicatorFeatureVector(query_id, query).values_as_bit_string()
# insert_commands_indicator_feature(commands_indicator_feature_id, vector, query_id)
# commands_indicator_feature_id += 1
# vector = CommandsIndicatorFeatureVector(query_id, query).values_as_bit_string()
# insert_commands_indicator_feature(commands_indicator_feature_id, vector, query_id)
# commands_indicator_feature_id += 1
pass
def load_commands_indicator_visualization():
cursor = db.execute("SELECT count(*), GROUP_CONCAT(query_id), indicator_vector \
FROM commands_indicators \
GROUP BY indicator_vector \
ORDER BY indicator_vector")
row_count = 0
group_id = 0
for (count, query_id_list, feature_string) in cursor.fetchall():
for query_id in query_id_list.split(','):
cursor = db.cursor()
cursor.execute('UPDATE queries SET commands_indicator_group_id =? WHERE id=?', [group_id, query_id])
db.commit()
for i in range(int(max(1, round(math.log(count))))):
for j in range(len(feature_string)):
if feature_string[j] == '1':
cmd = db.execute("SELECT command \
FROM commands_indicator_key \
WHERE idx=?", [str(j)]).fetchall()[0][0]
cls = db.execute("SELECT class FROM queries \
WHERE id=?", [str(query_id)]).fetchall()[0][0]
hash = ''.join([str(row_count), cmd, str(j)])
print hash
insert_commands_indicator_coordinates(row_count, j, cmd, hash, group_id, cls)
row_count += 1
group_id += 1
def load_commands_indicator_key_table():
#empty_query = Query("", 0, "", "")
#empty_vector = CommandsIndicatorFeatureVector(0, empty_query)
#for (cmd, idx) in empty_vector.command_index_tuples():
# insert_commands_indicator_key(cmd, idx)
pass
def insert_user(id, username):
cursor = db.cursor()
cursor.execute("INSERT INTO users (id, name) VALUES (?,?)", [id, username])
db.commit()
def insert_session(id, userid):
cursor = db.cursor()
cursor.execute("INSERT INTO sessions (id, user_id) VALUES (?,?)", [id, userid])
db.commit()
def insert_query(id, text, time, autogenerated, user_id, session_id=None):
cursor = db.cursor()
if session_id is not None:
cursor.execute("INSERT INTO queries \
(id, text, time, autogenerated, user_id, session_id) \
VALUES (?,?,?,?,?,?)",
[id, text, time, autogenerated, user_id, session_id])
else:
cursor.execute("INSERT INTO queries \
(id, text, time, autogenerated, user_id) \
VALUES (?,?,?,?,?)",
[id, text, time, autogenerated, user_id])
db.commit()
def insert_commands_indicator_feature(id, vector, query_id):
cursor = db.cursor()
cursor.execute("INSERT INTO commands_indicators \
(id, indicator_vector, query_id) VALUES (?,?,?)",
[id, vector, query_id])
db.commit()
def insert_commands_indicator_key(command, index):
cursor = db.cursor()
cursor.execute("INSERT INTO commands_indicator_key (command, idx) VALUES (?,?)", [command, index])
db.commit()
def insert_commands_indicator_coordinates(ridx, cidx, cmd, hash, gid, cls):
cursor = db.cursor()
cursor.execute("INSERT INTO commands_indicator_coordinates \
(rowidx, colidx, command, hash, indicator_group_id, class) \
VALUES (?,?,?,?,?,?)",
[str(ridx), str(cidx), str(cmd), str(hash), str(gid), str(cls)])
db.commit()