hydrus/hydrus/core/HydrusDBModule.py

80 lines
2.1 KiB
Python

import sqlite3
import typing
class HydrusDBModule( object ):
def __init__( self, name, cursor: sqlite3.Cursor ):
self.name = name
self._c = cursor
def _CreateIndex( self, table_name, columns, unique = False ):
if '.' in table_name:
table_name_simple = table_name.split( '.' )[1]
else:
table_name_simple = table_name
index_name = self._GenerateIndexName( table_name, columns )
if unique:
create_phrase = 'CREATE UNIQUE INDEX IF NOT EXISTS '
else:
create_phrase = 'CREATE INDEX IF NOT EXISTS '
on_phrase = ' ON ' + table_name_simple + ' (' + ', '.join( columns ) + ');'
statement = create_phrase + index_name + on_phrase
self._c.execute( statement )
def _GetIndexGenerationTuples( self ):
raise NotImplementedError()
def _GenerateIndexName( self, table_name, columns ):
return '{}_{}_index'.format( table_name, '_'.join( columns ) )
def CreateIndices( self ):
index_generation_tuples = self._GetIndexGenerationTuples()
for ( table_name, columns, unique ) in index_generation_tuples:
self._CreateIndex( table_name, columns, unique = unique )
def CreateTables( self ):
raise NotImplementedError()
def GetExpectedIndexNames( self ) -> typing.Collection[ str ]:
index_generation_tuples = self._GetIndexGenerationTuples()
expected_index_names = [ self._GenerateIndexName( table_name, columns ) for ( table_name, columns, unique ) in index_generation_tuples ]
return expected_index_names
def GetExpectedTableNames( self ) -> typing.Collection[ str ]:
raise NotImplementedError()