Class SQLStorage

All Implemented Interfaces:
Direct Known Subclasses:
MySQLStorage, SQLiteStorage

public abstract class SQLStorage extends VariablesStorage
TODO create a metadata table to store some properties (e.g. Skript version, Yggdrasil version) -- but what if some variables cannot be converted? move them to a different table? TODO create my own database connector or find a better one
  • Field Details

  • Constructor Details

    • SQLStorage

      public SQLStorage(String name, String createTableQuery)
      Creates a SQLStorage with a create table query.
      name - The name to be sent through this constructor when newInstance creates this class.
      createTableQuery - The create table query to send to the SQL engine.
  • Method Details

    • getTableName

      public String getTableName()
    • setTableName

      public void setTableName(String tableName)
    • initialize

      public abstract @Nullable lib.PatPeter.SQLibrary.Database initialize(SectionNode config)
      Initializes an SQL database with the user provided configuration section for loading the database.
      config - The configuration from the that defines this database.
      A Database implementation from SQLibrary.
    • getFormattedCreateQuery

      public @Nullable String getFormattedCreateQuery()
      Retrieve the create query with the tableName in it
      the create query with the tableName in it (%s -> tableName)
    • load_i

      protected boolean load_i(SectionNode n)
      Doesn't lock the database for reading (it's not used anywhere else, and locking while loading will interfere with loaded variables being deleted by Variables.variableLoaded(String, Object, VariablesStorage)).
      Specified by:
      load_i in class VariablesStorage
      Whether the database could be loaded successfully, i.e. whether the config is correct and all variables could be loaded.
    • allLoaded

      protected void allLoaded()
      Description copied from class: VariablesStorage
      Called after all storages have been loaded, and variables have been redistributed if settings have changed. This should commit the first transaction (which is not empty if variables have been moved from another database to this one or vice versa), and start repeating transactions if applicable.
      Specified by:
      allLoaded in class VariablesStorage
    • getFile

      protected File getFile(String file)
      Description copied from class: VariablesStorage
      Gets the file needed for this variable storage from the given file name.

      Will only be called if VariablesStorage.requiresFile() is true.

      Specified by:
      getFile in class VariablesStorage
      file - the given file name.
      the File object.
    • connect

      protected boolean connect()
      Description copied from class: VariablesStorage
      (Re)connects to the database.

      Not called on the first connect: do this in VariablesStorage.load_i(SectionNode). An error should be printed by this method prior to returning false.

      Specified by:
      connect in class VariablesStorage
      whether the connection could be re-established.
    • disconnect

      protected void disconnect()
      Description copied from class: VariablesStorage
      Disconnects from the database.
      Specified by:
      disconnect in class VariablesStorage
    • save

      protected boolean save(String name, @Nullable String type, @org.eclipse.jdt.annotation.Nullable byte[] value)
      Description copied from class: VariablesStorage
      Saves a variable.

      This is called from the main thread while variables are transferred between databases, and from the VariablesStorage.writeThread afterwards.

      type and value are both null iff this call is to delete the variable.

      Specified by:
      save in class VariablesStorage
      name - the name of the variable.
      type - the type of the variable.
      value - the serialized value of the variable.
      Whether the variable was saved.
    • close

      public void close()
      Description copied from class: VariablesStorage
      Called when Skript gets disabled.

      The default implementation will wait for all variables to be saved before setting VariablesStorage.closed to true and stopping the write thread.

      Therefore, make sure to call super.close() if this method is overridden.

      Specified by:
      close in interface Closeable
      close in class VariablesStorage
    • checkDatabase

      protected void checkDatabase()