Skip to content

Commit

Permalink
started to implement support for SQLite
Browse files Browse the repository at this point in the history
  • Loading branch information
barthisrael committed Nov 6, 2020
1 parent 3d9fadb commit 30cb0eb
Show file tree
Hide file tree
Showing 11 changed files with 2,364 additions and 14 deletions.
123 changes: 119 additions & 4 deletions OmniDB/OmniDB_app/include/OmniDatabase/SQLite.py
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,9 @@ def __init__(self, p_service, p_conn_id=0, p_alias='', p_foreignkeys=True):
self.v_server = ''
self.v_port = ''
self.v_service = p_service
self.v_active_service = p_service
self.v_user = ''
self.v_active_user = ''
self.v_schema = ''
self.v_connection = Spartacus.Database.SQLite(p_service, p_foreignkeys)

Expand Down Expand Up @@ -112,6 +114,46 @@ def __init__(self, p_service, p_conn_id=0, p_alias='', p_foreignkeys=True):
self.v_reserved_words = []
self.v_console_help = "Console tab."
self.v_use_server_cursor = False
self.v_version = ''
self.v_version_num = ''

# Decorator to acquire lock before performing action
def lock_required(function):
def wrap(self, *args, **kwargs):
try:
if self.v_lock != None:
self.v_lock.acquire()
except:
None
try:
r = function(self, *args, **kwargs)
except:
try:
if self.v_lock != None:
self.v_lock.release()
except:
None
raise
try:
if self.v_lock != None:
self.v_lock.release()
except:
None
return r
wrap.__doc__ = function.__doc__
wrap.__name__ = function.__name__
return wrap

@lock_required
def GetVersion(self):
self.v_version = self.v_connection.ExecuteScalar('SELECT sqlite_version()')
v_splitted_version = self.v_version.split('.')
self.v_version_num = '{0}{1}{2}'.format(
v_splitted_version[0].zfill(2),
v_splitted_version[1].zfill(2),
v_splitted_version[2].zfill(2)
)
return 'SQLite ' + self.v_version

def GetName(self):
return self.v_service
Expand Down Expand Up @@ -353,17 +395,90 @@ def QueryTableRecords(self, p_column_list, p_table, p_filter, p_count=-1):
), True
)

def TemplateCreateView(self):
return Template('')

def TemplateAlterView(self):
return Template('')

def TemplateDropView(self):
return Template('')

def TemplateCreateTable(self):
pass
return Template('''CREATE
--TEMPORARY
TABLE table_name
(
column_name data_type
--CONSTRAINT constraint_name
--NOT NULL
--CHECK
--UNIQUE
--PRIMARY KEY
--FOREIGN KEY
)
--WITHOUT ROWID
''')

def TemplateAlterTable(self):
pass
return Template('')

def TemplateDropTable(self):
return Template('DROP TABLE #table_name#')

def TemplateCreateColumn(self):
return Template('')

def TemplateAlterColumn(self):
return Template('')

def TemplateDropColumn(self):
return Template('')

def TemplateCreatePrimaryKey(self):
return Template('')

def TemplateDropPrimaryKey(self):
return Template('')

def TemplateCreateUnique(self):
return Template('')

def TemplateDropUnique(self):
return Template('')

def TemplateCreateForeignKey(self):
return Template('')

def TemplateDropForeignKey(self):
return Template('')

def TemplateCreateIndex(self):
pass
return Template('')

def TemplateAlterIndex(self):
return Template('')

def TemplateDropIndex(self):
pass
return Template('')

def TemplateDelete(self):
return Template('')

def TemplateTruncate(self):
return Template('')

def GetAutocompleteValues(self, p_columns, p_filter):
return None

def GetErrorPosition(self, p_error_message):
vector = str(p_error_message).split('\n')
v_return = None

if len(vector) > 1 and vector[1][0:4]=='LINE':
v_return = {
'row': vector[1].split(':')[0].split(' ')[1],
'col': vector[2].index('^') - len(vector[1].split(':')[0])-2
}

return v_return
4 changes: 2 additions & 2 deletions OmniDB/OmniDB_app/include/Spartacus/Database.py
Original file line number Diff line number Diff line change
Expand Up @@ -823,9 +823,9 @@ def GetConnectionString(self):
def Open(self, p_autocommit=True):
try:
if p_autocommit:
self.v_con = sqlite3.connect(self.v_service, self.v_timeout, isolation_level=None)
self.v_con = sqlite3.connect(self.v_service, self.v_timeout, isolation_level=None, check_same_thread=False)
else:
self.v_con = sqlite3.connect(self.v_service, self.v_timeout)
self.v_con = sqlite3.connect(self.v_service, self.v_timeout, check_same_thread=False)
#self.v_con.row_factory = sqlite3.Row
self.v_cur = self.v_con.cursor()
if self.v_foreignkeys:
Expand Down
21 changes: 21 additions & 0 deletions OmniDB/OmniDB_app/migrations/0003_3_1_0.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Generated by Django 3.1.1 on 2020-11-06 13:43

from django.db import migrations


def populate_technologies(apps, schema_editor):
Technology = apps.get_model('OmniDB_app', 'Technology')
Technology(name='sqlite').save()


class Migration(migrations.Migration):

dependencies = [
('OmniDB_app', '0002_3_0_1'),
]

operations = [
migrations.RunPython(
code=populate_technologies,
)
]
53 changes: 49 additions & 4 deletions OmniDB/OmniDB_app/static/OmniDB_app/js/connections.js
Original file line number Diff line number Diff line change
Expand Up @@ -763,6 +763,38 @@ function editConnection(p_conn_obj) {
document.getElementById('conn_form_use_tunnel').checked = true;
document.getElementById('conn_form_use_tunnel').setAttribute('disabled', true);
}
else if (p_conn_obj.technology === 'sqlite') {
v_disable_list = [
'conn_form_connstring',
'conn_form_server',
'conn_form_port',
'conn_form_user',
'conn_form_user_pass'
];
v_enable_list = [
'conn_form_database'
]
if (p_conn_obj.tunnel.enabled) {
v_enable_list = v_enable_list.concat([
'conn_form_ssh_server',
'conn_form_ssh_port',
'conn_form_ssh_user',
'conn_form_ssh_password',
'conn_form_ssh_key',
'conn_form_ssh_key_input'
]);
}
else {
v_disable_list = v_disable_list.concat([
'conn_form_ssh_server',
'conn_form_ssh_port',
'conn_form_ssh_user',
'conn_form_ssh_password',
'conn_form_ssh_key',
'conn_form_ssh_key_input'
]);
}
}
else {
// Has connection string.
if (p_conn_obj.conn_string.trim() !== '' && p_conn_obj.conn_string.trim() !== null) {
Expand Down Expand Up @@ -791,24 +823,24 @@ function editConnection(p_conn_obj) {
];
}
if (p_conn_obj.tunnel.enabled) {
v_enable_list = [
v_enable_list = v_enable_list.concat([
'conn_form_ssh_server',
'conn_form_ssh_port',
'conn_form_ssh_user',
'conn_form_ssh_password',
'conn_form_ssh_key',
'conn_form_ssh_key_input'
];
]);
}
else {
v_disable_list = [
v_disable_list = v_disable_list.concat([
'conn_form_ssh_server',
'conn_form_ssh_port',
'conn_form_ssh_user',
'conn_form_ssh_password',
'conn_form_ssh_key',
'conn_form_ssh_key_input'
];
]);
}
}

Expand Down Expand Up @@ -946,6 +978,19 @@ function updateModalEditConnectionState(e) {
v_disable_list.push('conn_form_user');
v_disable_list.push('conn_form_user_pass');
}
// Case where technology is sqlite.
else if (v_technology === 'sqlite') {
// Disabled fields
v_disable_list.push('conn_form_connstring');
v_disable_list.push('conn_form_server');
v_disable_list.push('conn_form_port');
v_disable_list.push('conn_form_user');
v_disable_list.push('conn_form_user_pass');
// Enabled fields
v_enable_list.push('conn_form_database');
// Form cases will check for database.
v_form_cases.push('conn_form_database');
}
// Case where connection string has value.
else if (v_use_connection_string !== '' && v_use_connection_string !== null) {
v_disable_list.push('conn_form_server');
Expand Down
5 changes: 4 additions & 1 deletion OmniDB/OmniDB_app/static/OmniDB_app/js/plugin_hook.js
Original file line number Diff line number Diff line change
Expand Up @@ -188,7 +188,10 @@ $(function () {
mysqlTreeNodeClick: [],
mariadbTreeNodeOpen: [],
mariadbTreeContextMenu: [],
mariadbTreeNodeClick: []
mariadbTreeNodeClick: [],
sqliteTreeNodeOpen: [],
sqliteTreeContextMenu: [],
sqliteTreeNodeClick: [],
}

execAjax('/get_plugins/',
Expand Down
Loading

0 comments on commit 30cb0eb

Please sign in to comment.