package de.nisble.droidsweeper.game.database;
import de.nisble.droidsweeper.config.Level;
import android.provider.BaseColumns;
final class DSDBContract {
// private static final String CLASSNAME =
// DSDBContract.class.getSimpleName();
static final int DB_VERSION = 4;
static final String DB_NAME = "droidsweeper.sqlite";
DSDBContract() {
}
static abstract class LevelTable implements BaseColumns {
static final String TABLE_NAME = "level";
static final String CN_LEVEL = "level";
static final String CN_X = "x";
static final String CN_Y = "y";
static final String CN_BOMBS = "bombs";
//@formatter:off
static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY, "
+ CN_LEVEL + " INTEGER UNIQUE NOT NULL, "
+ CN_X + " INTEGER NOT NULL, "
+ CN_Y + " INTEGER NOT NULL, "
+ CN_BOMBS + " INTEGER NOT NULL)";
static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
//@formatter:on
// Helper that creates standard insert strings
private static String getInsertString(Level l) {
//@formatter:off
return new String("INSERT INTO " + TABLE_NAME
+ " ("
+ CN_LEVEL + ", " + CN_X + ", " + CN_Y + ", " + CN_BOMBS
+ ") VALUES ("
+ l.ordinal() + ", " + l.X + ", " + l.Y + ", " + l.BOMBS
+ ")");
//@formatter:on
}
static final String INSERT_EASY = getInsertString(Level.EASY);
static final String INSERT_NORMAL = getInsertString(Level.NORMAL);
static final String INSERT_HARD = getInsertString(Level.HARD);
static String q(String column) {
return new String(TABLE_NAME + "." + column);
}
}
static abstract class PlayerTable implements BaseColumns {
static final String TABLE_NAME = "player";
static final String CN_NAME = "name";
//@formatter:off
static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY, "
+ CN_NAME + " TEXT NOT NULL)";
//@formatter:on
static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
static String q(String column) {
return new String(TABLE_NAME + "." + column);
}
}
static abstract class GameTable implements BaseColumns {
static final String TABLE_NAME = "game";
static final String CN_GAMEPLAYER = "gameplayer";
static final String CN_GAMELEVEL = "gamelevel";
static final String CN_TIME = "time";
static final String CN_DATE = "date";
static final String CN_REPLAY = "replay";
//@formatter:off
static final String CREATE_TABLE = "CREATE TABLE " + TABLE_NAME + " ("
+ _ID + " INTEGER PRIMARY KEY, "
+ CN_GAMEPLAYER + " REFERENCES " + PlayerTable.TABLE_NAME + "(" + PlayerTable._ID + "), "
+ CN_GAMELEVEL + " REFERENCES " + LevelTable.TABLE_NAME + "(" + LevelTable.CN_LEVEL + "), "
+ CN_TIME + " INTEGER NOT NULL, "
+ CN_DATE + " DATETIME NOT NULL, "
+ CN_REPLAY + " BLOB)";
//@formatter:on
static final String DROP_TABLE = "DROP TABLE IF EXISTS " + TABLE_NAME;
static String q(String column) {
return new String(TABLE_NAME + "." + column);
}
}
static abstract class Level4GameView {
static final String VIEW_NAME = "level4game";
static final String _ID = GameTable._ID;
static final String CN_LEVEL = LevelTable.CN_LEVEL;
static final String CN_TIME = GameTable.CN_TIME;
static final String CN_DATE = GameTable.CN_DATE;
static final String CN_GAMEPLAYER = GameTable.CN_GAMEPLAYER;
//@formatter:off
static final String CREATE_VIEW = "CREATE VIEW IF NOT EXISTS " + VIEW_NAME
+ " AS SELECT "
+ GameTable.q(_ID) + ", "
+ CN_LEVEL + ", "
+ CN_TIME + ", "
+ CN_DATE + ", "
+ CN_GAMEPLAYER
+ " FROM " + GameTable.TABLE_NAME + " JOIN " + LevelTable.TABLE_NAME
+ " ON " + LevelTable.CN_LEVEL + "=" + GameTable.CN_GAMELEVEL;
//@formatter:on
static final String DROP_VIEW = "DROP VIEW IF EXISTS " + VIEW_NAME;
}
static abstract class Player4GameView {
static final String VIEW_NAME = "player4game";
static final String _ID = GameTable._ID;
static final String CN_NAME = PlayerTable.CN_NAME;
//@formatter:off
static final String CREATE_VIEW = "CREATE VIEW IF NOT EXISTS " + VIEW_NAME
+" AS SELECT "
+ GameTable.q(_ID) + ", "
+ CN_NAME
+ " FROM " + GameTable.TABLE_NAME + " JOIN " + PlayerTable.TABLE_NAME
+ " ON " + GameTable.CN_GAMEPLAYER + "=" + PlayerTable.q(_ID);
//@formatter:on
static final String DROP_VIEW = "DROP VIEW IF EXISTS " + VIEW_NAME;
}
static abstract class GamesView {
static final String VIEW_NAME = "games";
static final String _ID = GameTable._ID;
static final String CN_LEVEL = LevelTable.CN_LEVEL;
static final String CN_NAME = PlayerTable.CN_NAME;
static final String CN_TIME = GameTable.CN_TIME;
static final String CN_DATE = GameTable.CN_DATE;
// CREATE VIEW IF NOT EXISTS games AS SELECT l4g._id AS _id, level,
// name, time, date FROM level4game l4g JOIN player4game p4g ON
// l4g._id=p4g._id;
//@formatter:off
static final String CREATE_VIEW = "CREATE VIEW IF NOT EXISTS " + VIEW_NAME
+" AS SELECT "
+ "l4g." + _ID + " AS " + _ID + ", "
+ CN_LEVEL + ", "
+ CN_NAME + ", "
+ CN_TIME + ", "
+ CN_DATE
+ " FROM " + Level4GameView.VIEW_NAME + " l4g JOIN " + Player4GameView.VIEW_NAME + " p4g"
+ " ON l4g." + _ID + "=p4g." + _ID;
//@formatter:on
static final String DROP_VIEW = "DROP VIEW IF EXISTS " + VIEW_NAME;
}
// static final String ORDER_TIME_DATE_ASC = GameTable.CN_TIME + ", " + GameTable.CN_DATE;
}