package com.daviancorp.android.data.database; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.database.sqlite.SQLiteQueryBuilder; import android.util.Log; import com.daviancorp.android.data.classes.Wishlist; import com.daviancorp.android.data.classes.WishlistComponent; import com.daviancorp.android.data.classes.WishlistData; /* QUERY REFERENCE: For queries with no JOINs: - call wrapHelper() - set values for _Distinct _Table _Columns _Selection _SelectionArgs _GroupBy _Having _OrderBy _Limit For queries with JOINs: - call wrapJoinHelper(SQLiteQueryBuilder qb) = set values for _Columns _Selection _SelectionArgs _GroupBy _Having _OrderBy _Limit */ public class MonsterHunterDatabaseHelper extends SQLiteOpenHelper { private static final String TAG = "MonsterHunterDatabaseHelper"; private static MonsterHunterDatabaseHelper mInstance = null; //The Android's default system path of your application database. // /data/data/com.daviancorp.android.monsterhunter3udatabase/databases/ private static String DB_PATH = "/data/data/com.daviancorp.android.mh3udatabase/databases/"; private static String DB_NAME = "mh3u.db"; private static String DB_TEMP_NAME = "mh3u_temp.db"; private static String ASSETS_DB_FOLDER = "db"; private static final int VERSION = 5; // EDIT private final Context myContext; private SQLiteDatabase myDataBase; /** * Returns Singleton instance of the helper object * @param c Application context * @return Singleton instance of helper */ public static MonsterHunterDatabaseHelper getInstance(Context c) { // Use the application context, which will ensure that you // don't accidentally leak an Activity's context. // See this article for more information: http://bit.ly/6LRzfx if (mInstance == null) { mInstance = new MonsterHunterDatabaseHelper(c.getApplicationContext()); } return mInstance; } /** * Initialize the helper object * @param context */ private MonsterHunterDatabaseHelper(Context context) { super(context, DB_NAME, null, VERSION); myContext = context; try { createDatabase(); } catch (IOException e) { throw new Error("Error copying database"); } } /** * Creates a empty database on the system and overwrite it with your own * database. **/ public void createDatabase() throws IOException { boolean dbExist = checkDatabase(); if (!dbExist) { super.getReadableDatabase(); try { copyDatabase(); } catch (IOException e) { throw new Error("Error copying database"); } try { getWritableDatabase().execSQL("INSERT INTO 'wishlist' (`_id`, `name`) VALUES (1, 'My Wishlist');"); } finally { close(); } } } /** * Check if the database already exist to avoid re-copying the file each * time you open the application. * * @return true if it exists, false if it doesn't */ private boolean checkDatabase() { SQLiteDatabase checkDB = null; try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY|SQLiteDatabase.NO_LOCALIZED_COLLATORS); } catch (SQLiteException e) { // database does't exist yet. } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } /** * Copy distributed db in assets folder to data folder * @throws IOException */ private void copyDatabase() throws IOException { String[] dbFiles = myContext.getAssets().list(ASSETS_DB_FOLDER); String outFileName = DB_PATH + DB_NAME; OutputStream myOutput = new FileOutputStream(outFileName); for(int i =0; i < dbFiles.length; i++) { InputStream myInput = myContext.getAssets().open(ASSETS_DB_FOLDER+"/"+dbFiles[i]); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myInput.close(); } myOutput.flush(); myOutput.close(); } /** * Copy distributed db in assets folder to temp file for upgrade * @throws IOException */ private void copyTempDatabase() throws IOException { String[] dbFiles = myContext.getAssets().list(ASSETS_DB_FOLDER); String outFileName = DB_PATH + DB_TEMP_NAME; OutputStream myOutput = new FileOutputStream(outFileName); for(int i =0; i < dbFiles.length; i++) { InputStream myInput = myContext.getAssets().open(ASSETS_DB_FOLDER+"/"+dbFiles[i]); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myInput.close(); } myOutput.flush(); myOutput.close(); } /** * Set database instance * @throws SQLException */ public void openDatabase() throws SQLException { myDataBase = getWritableDatabase(); } /** * Returns an opened instance of the temp database * @return The temp database object * @throws SQLException */ public SQLiteDatabase openTempDatabase() throws SQLException { // Open the database String myPath = DB_PATH + DB_TEMP_NAME; return SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READWRITE|SQLiteDatabase.NO_LOCALIZED_COLLATORS); } /** * Close database */ @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); super.close(); } @Override public void onCreate(SQLiteDatabase db) { } /** * Copy the new database and transfer the wishlist data */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // Transfer over the wishlist data if (newVersion > oldVersion) { //query wishlist data with provided db instance //Must NOT call getReadableDatabase() or loop will occur WishlistCursor wc = queryWishlists(db); WishlistDataCursor wdc = queryWishlistsData(db); WishlistComponentCursor wcc = queryWishlistsComponent(db); //Pull the new database to a temp file try { copyTempDatabase(); } catch (IOException e) { throw new Error("Error copying database"); } //get connection to temp database SQLiteDatabase newDb = null; try { newDb = openTempDatabase(); } catch (SQLException e) { } //Copy the wishlast tables from current db to new db if(newDb != null) { wc.moveToFirst(); wdc.moveToFirst(); wcc.moveToFirst(); while (!wc.isAfterLast()) { Wishlist wishlist = wc.getWishlist(); queryAddWishlistAll(newDb, wishlist.getId(), wishlist.getName()); wc.moveToNext(); } wc.close(); while (!wdc.isAfterLast()) { WishlistData wishlistData = wdc.getWishlistData(); queryAddWishlistDataAll(newDb, wishlistData.getWishlistId(), wishlistData.getItem().getId(), wishlistData.getQuantity(), wishlistData.getSatisfied(), wishlistData.getPath()); wdc.moveToNext(); } wdc.close(); while (!wcc.isAfterLast()) { WishlistComponent wishlistComponent = wcc.getWishlistComponent(); queryAddWishlistComponentAll(newDb, wishlistComponent.getWishlistId(), wishlistComponent.getItem().getId(), wishlistComponent.getQuantity(), wishlistComponent.getNotes()); wcc.moveToNext(); } wcc.close(); newDb.close(); } //Overwrite current db with temp db //Overwriting with file streams as delete/rename doesn't seem to work correctly try { InputStream myInput = new FileInputStream(DB_PATH + DB_TEMP_NAME); OutputStream myOutput = new FileOutputStream(DB_PATH + DB_NAME); byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } myOutput.flush(); myOutput.close(); myInput.close(); } catch (IOException e) { throw new Error("Error overwritting database"); } } } @Override public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) { } //removed getWritableDatabase() and getReadableDatabase() overrides as they broke //functionality such as onUpgrade() private String makePlaceholders(int len) { if (len < 1) { // It will lead to an invalid query anyway .. throw new RuntimeException("No placeholders"); } else { StringBuilder sb = new StringBuilder(len * 2 - 1); sb.append("?"); for (int i = 1; i < len; i++) { sb.append(",?"); } return sb.toString(); } } /* * Helper method: used for queries that has no JOINs */ private Cursor wrapHelper(QueryHelper qh) { return getReadableDatabase().query(qh.Distinct, qh.Table, qh.Columns, qh.Selection, qh.SelectionArgs, qh.GroupBy, qh.Having, qh.OrderBy, qh.Limit); } /* * Helper method: used for queries that has no JOINs */ private Cursor wrapHelper(SQLiteDatabase db, QueryHelper qh) { return db.query(qh.Distinct, qh.Table, qh.Columns, qh.Selection, qh.SelectionArgs, qh.GroupBy, qh.Having, qh.OrderBy, qh.Limit); } /* * Helper method: used for queries that has JOINs */ private Cursor wrapJoinHelper(SQLiteQueryBuilder qb, QueryHelper qh) { // Log.d(TAG, "qb: " + qb.buildQuery(_Columns, _Selection, _SelectionArgs, _GroupBy, _Having, _OrderBy, _Limit)); return qb.query(getReadableDatabase(), qh.Columns, qh.Selection, qh.SelectionArgs, qh.GroupBy, qh.Having, qh.OrderBy, qh.Limit); } /* * Insert data to a table */ public long insertRecord(String table, ContentValues values) { long l = getWritableDatabase().insert(table, null, values); return l; } /* * Insert data to a table */ public long insertRecord(SQLiteDatabase db, String table, ContentValues values) { long l = db.insert(table, null, values); return l; } /* * Update data in a table */ public int updateRecord(String table, String strFilter, ContentValues values) { int i = getWritableDatabase().update(table, values, strFilter, null); return i; } /* * Delete data in a table */ public boolean deleteRecord(String table, String where, String[] args) { boolean b = getWritableDatabase().delete(table, where, args) > 0; return b; } /********************************* ARENA QUEST QUERIES ******************************************/ /* * Get all arena quests */ public ArenaQuestCursor queryArenaQuests() { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARENA_QUESTS; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArenaQuestCursor(wrapJoinHelper(builderArenaQuest(), qh)); } /* * Get a specific arena quest */ public ArenaQuestCursor queryArenaQuest(long id) { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_ARENA_QUESTS; qh.Columns = null; qh.Selection = "a." + S.COLUMN_ARENA_QUESTS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArenaQuestCursor(wrapJoinHelper(builderArenaQuest(), qh)); } /* * Get all arena quests based on location */ public ArenaQuestCursor queryArenaQuestLocation(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARENA_QUESTS; qh.Selection = "a." + S.COLUMN_ARENA_QUESTS_LOCATION_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArenaQuestCursor(wrapJoinHelper(builderArenaQuest(), qh)); } /* * Helper method to query for ArenaQuest */ private SQLiteQueryBuilder builderArenaQuest() { // SELECT a._id AS _id, a.name AS aname, a.location_id, a.reward., // a.num_participants, a.time_s, a.time_a, a.time_b, // l.name AS lname // FROM arena_quests AS a // LEFT OUTER JOIN locations AS l on a.location_id = l._id; String a = "a"; String l = "l"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", a + "." + S.COLUMN_ARENA_QUESTS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_ARENA_QUESTS_NAME, a + "." + S.COLUMN_ARENA_QUESTS_NAME + " AS " + a + S.COLUMN_ARENA_QUESTS_NAME); projectionMap.put(S.COLUMN_ARENA_QUESTS_GOAL, a + "." + S.COLUMN_ARENA_QUESTS_GOAL); projectionMap.put(S.COLUMN_ARENA_QUESTS_LOCATION_ID, a + "." + S.COLUMN_ARENA_QUESTS_LOCATION_ID); projectionMap.put(S.COLUMN_ARENA_QUESTS_REWARD, a + "." + S.COLUMN_ARENA_QUESTS_REWARD); projectionMap.put(S.COLUMN_ARENA_QUESTS_NUM_PARTICIPANTS, a + "." + S.COLUMN_ARENA_QUESTS_NUM_PARTICIPANTS); projectionMap.put(S.COLUMN_ARENA_QUESTS_TIME_S, a + "." + S.COLUMN_ARENA_QUESTS_TIME_S); projectionMap.put(S.COLUMN_ARENA_QUESTS_TIME_A, a + "." + S.COLUMN_ARENA_QUESTS_TIME_A); projectionMap.put(S.COLUMN_ARENA_QUESTS_TIME_B, a + "." + S.COLUMN_ARENA_QUESTS_TIME_B); projectionMap.put(l + S.COLUMN_LOCATIONS_NAME, l + "." + S.COLUMN_LOCATIONS_NAME + " AS " + l + S.COLUMN_LOCATIONS_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_ARENA_QUESTS + " AS a" + " LEFT OUTER JOIN " + S.TABLE_LOCATIONS + " AS l " + " ON " + "a." + S.COLUMN_ARENA_QUESTS_LOCATION_ID + " = " + "l." + S.COLUMN_LOCATIONS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* ARENA REWARD QUERIES ******************************************/ /* * Get all reward arena quests based on item */ public ArenaRewardCursor queryArenaRewardItem(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARENA_REWARDS; qh.Selection = "ar." + S.COLUMN_ARENA_REWARDS_ITEM_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = "ar." + S.COLUMN_ARENA_REWARDS_PERCENTAGE + " DESC"; qh.Limit = null; return new ArenaRewardCursor(wrapJoinHelper(builderArenaReward(), qh)); } /* * Get all arena quest reward items based on arena quest */ public ArenaRewardCursor queryArenaRewardArena(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARENA_REWARDS; qh.Selection = "ar." + S.COLUMN_ARENA_REWARDS_ARENA_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArenaRewardCursor(wrapJoinHelper(builderArenaReward(), qh)); } /* * Helper method to query for ArenaReward */ private SQLiteQueryBuilder builderArenaReward() { // SELECT ar._id AS _id, ar.arena_id, ar.item_id, // ar.percentage, ar.stack_size, // a.name AS aname, i.name AS iname // FROM quest_rewards AS ar // LEFT OUTER JOIN arena_quests AS a ON ar.arena_id = q._id // LEFT OUTER JOIN items AS i ON ar.item_id = i._id; String ar = "ar"; String i = "i"; String a = "a"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", ar + "." + S.COLUMN_ARENA_REWARDS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_ARENA_REWARDS_ITEM_ID, ar + "." + S.COLUMN_ARENA_REWARDS_ITEM_ID); projectionMap.put(S.COLUMN_ARENA_REWARDS_ARENA_ID, ar + "." + S.COLUMN_ARENA_REWARDS_ARENA_ID); projectionMap.put(S.COLUMN_ARENA_REWARDS_PERCENTAGE, ar + "." + S.COLUMN_ARENA_REWARDS_PERCENTAGE); projectionMap.put(S.COLUMN_ARENA_REWARDS_STACK_SIZE, ar + "." + S.COLUMN_ARENA_REWARDS_STACK_SIZE); projectionMap.put(i + S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME + " AS " + i + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(a + S.COLUMN_ARENA_QUESTS_NAME, a + "." + S.COLUMN_ARENA_QUESTS_NAME + " AS " + a + S.COLUMN_ARENA_QUESTS_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_ARENA_REWARDS + " AS ar" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "ar." + S.COLUMN_ARENA_REWARDS_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_ARENA_QUESTS + " AS a " + " ON " + "ar." + S.COLUMN_ARENA_REWARDS_ARENA_ID + " = " + "a." + S.COLUMN_ARENA_QUESTS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* ARMOR QUERIES ******************************************/ /* * Get all armor */ public ArmorCursor queryArmor() { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARMOR; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArmorCursor(wrapJoinHelper(builderArmor(), qh)); } /* * Get a specific armor */ public ArmorCursor queryArmor(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARMOR; qh.Selection = "a." + S.COLUMN_ARMOR_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new ArmorCursor(wrapJoinHelper(builderArmor(), qh)); } /* * Get a specific armor based on hunter type */ public ArmorCursor queryArmorType(String type) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARMOR; qh.Selection = "a." + S.COLUMN_ARMOR_HUNTER_TYPE + " = ? " + " OR " + "a." + S.COLUMN_ARMOR_HUNTER_TYPE + " = 'Both'"; qh.SelectionArgs = new String[]{type}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArmorCursor(wrapJoinHelper(builderArmor(), qh)); } /* * Get a specific armor based on slot */ public ArmorCursor queryArmorSlot(String slot) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARMOR; qh.Selection = "a." + S.COLUMN_ARMOR_SLOT + " = ?"; qh.SelectionArgs = new String[]{slot}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArmorCursor(wrapJoinHelper(builderArmor(), qh)); } /* * Get a specific armor based on hunter type and slot */ public ArmorCursor queryArmorTypeSlot(String type, String slot) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ARMOR; qh.Selection = "(a." + S.COLUMN_ARMOR_HUNTER_TYPE + " = ?" + " OR " + "a." + S.COLUMN_ARMOR_HUNTER_TYPE + " = 'Both') " + " AND " + "a." + S.COLUMN_ARMOR_SLOT + " = ?"; qh.SelectionArgs = new String[]{type, slot}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ArmorCursor(wrapJoinHelper(builderArmor(), qh)); } /* * Helper method to query for armor */ private SQLiteQueryBuilder builderArmor() { // SELECT a._id AS _id, a.slot, a.defense, a.max_defense, a.fire_res, a.thunder_res, // a.dragon_res, a.water_res, a.ice_res, a.gender, a.hunter_type, a.num_slots, // i.name, i.jpn_name, i.type, i.rarity, i.carry_capacity, i.buy, i.sell, i.description, // i.icon_name, i.armor_dupe_name_fix // FROM armor AS a LEFT OUTER JOIN items AS i ON a._id = i._id; String a = "a"; String i = "i"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", a + "." + S.COLUMN_ARMOR_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_ARMOR_SLOT, a + "." + S.COLUMN_ARMOR_SLOT); projectionMap.put(S.COLUMN_ARMOR_DEFENSE, a + "." + S.COLUMN_ARMOR_DEFENSE); projectionMap.put(S.COLUMN_ARMOR_MAX_DEFENSE, a + "." + S.COLUMN_ARMOR_MAX_DEFENSE); projectionMap.put(S.COLUMN_ARMOR_FIRE_RES, a + "." + S.COLUMN_ARMOR_FIRE_RES); projectionMap.put(S.COLUMN_ARMOR_THUNDER_RES, a + "." + S.COLUMN_ARMOR_THUNDER_RES); projectionMap.put(S.COLUMN_ARMOR_DRAGON_RES, a + "." + S.COLUMN_ARMOR_DRAGON_RES); projectionMap.put(S.COLUMN_ARMOR_WATER_RES, a + "." + S.COLUMN_ARMOR_WATER_RES); projectionMap.put(S.COLUMN_ARMOR_ICE_RES, a + "." + S.COLUMN_ARMOR_ICE_RES); projectionMap.put(S.COLUMN_ARMOR_GENDER, a + "." + S.COLUMN_ARMOR_GENDER); projectionMap.put(S.COLUMN_ARMOR_HUNTER_TYPE, a + "." + S.COLUMN_ARMOR_HUNTER_TYPE); projectionMap.put(S.COLUMN_ARMOR_NUM_SLOTS, a + "." + S.COLUMN_ARMOR_NUM_SLOTS); projectionMap.put(S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_JPN_NAME, i + "." + S.COLUMN_ITEMS_JPN_NAME); projectionMap.put(S.COLUMN_ITEMS_TYPE, i + "." + S.COLUMN_ITEMS_TYPE); projectionMap.put(S.COLUMN_ITEMS_RARITY, i + "." + S.COLUMN_ITEMS_RARITY); projectionMap.put(S.COLUMN_ITEMS_CARRY_CAPACITY, i + "." + S.COLUMN_ITEMS_CARRY_CAPACITY); projectionMap.put(S.COLUMN_ITEMS_BUY, i + "." + S.COLUMN_ITEMS_BUY); projectionMap.put(S.COLUMN_ITEMS_SELL, i + "." + S.COLUMN_ITEMS_SELL); projectionMap.put(S.COLUMN_ITEMS_DESCRIPTION, i + "." + S.COLUMN_ITEMS_DESCRIPTION); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX, i + "." + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_ARMOR + " AS a" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "a." + S.COLUMN_ARMOR_ID + " = " + "i." + S.COLUMN_ITEMS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* COMBINING QUERIES ******************************************/ /* * Get all combinings */ public CombiningCursor queryCombinings() { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_COMBINING; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new CombiningCursor(wrapJoinHelper(builderCursor(), qh)); } /* * Get a specific combining */ public CombiningCursor queryCombining(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_COMBINING; qh.Selection = "c._id" + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new CombiningCursor(wrapJoinHelper(builderCursor(), qh)); } private SQLiteQueryBuilder builderCursor() { // SELECT c._id AS _id, c.amount_made_min, c.amount_made_max, c.percentage, // crt._id AS crt__id, crt.name AS crt_name, crt.jpn_name AS crt_jpn_name, crt.type AS crt_type, crt.rarity AS crt_rarity, // crt.carry_capacity AS crt_carry_capacity, crt.buy AS crt_buy, crt.sell AS crt_sell, crt.description AS crt_description, // crt.icon_name AS crt_icon_name, crt.armor_dupe_name_fix AS crt_armor_dupe_name, // // mat1._id AS mat1__id, mat1.name AS mat1_name, mat1.jpn_name AS mat1_jpn_name, mat1.type AS mat1_type, mat1.rarity AS mat1_rarity, // mat1.carry_capacity AS mat1_carry_capacity, mat1.buy AS mat1_buy, mat1.sell AS mat1_sell, mat1.description AS mat1_description, // mat1.icon_name AS mat1_icon_name, mat1.armor_dupe_name_fix AS mat1_armor_dupe_name, // // // mat2._id AS mat2__id, mat2.name AS mat2_name, mat2.jpn_name AS mat2_jpn_name, mat2.type AS mat2_type, mat2.rarity AS mat2_rarity, // mat2.carry_capacity AS mat2_carry_capacity, mat2.buy AS mat2_buy, mat2.sell AS mat2_sell, mat2.description AS mat2_description, // mat2.icon_name AS mat2_icon_name, mat2.armor_dupe_name_fix AS mat2_armor_dupe_name // // FROM combining AS c LEFT OUTER JOIN items AS crt ON c.created_item_id = crt._id // LEFT OUTER JOIN items AS mat1 ON c.item_1_id = mat1._id // LEFT OUTER JOIN items AS mat2 ON c.item_2_id = mat2._id; String comb = "c."; String[] items = new String[] {"crt", "mat1", "mat2"}; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", comb + S.COLUMN_ITEMS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_COMBINING_AMOUNT_MADE_MIN, comb + S.COLUMN_COMBINING_AMOUNT_MADE_MIN); projectionMap.put(S.COLUMN_COMBINING_AMOUNT_MADE_MAX, comb + S.COLUMN_COMBINING_AMOUNT_MADE_MAX); projectionMap.put(S.COLUMN_COMBINING_PERCENTAGE, comb + S.COLUMN_COMBINING_PERCENTAGE); for (String i : items) { projectionMap.put(i + S.COLUMN_ITEMS_ID, i + "." + S.COLUMN_ITEMS_ID + " AS " + i + S.COLUMN_ITEMS_ID); projectionMap.put(i + S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME + " AS " + i + S.COLUMN_ITEMS_NAME); projectionMap.put(i + S.COLUMN_ITEMS_JPN_NAME, i + "." + S.COLUMN_ITEMS_JPN_NAME + " AS " + i + S.COLUMN_ITEMS_JPN_NAME); projectionMap.put(i + S.COLUMN_ITEMS_TYPE, i + "." + S.COLUMN_ITEMS_TYPE + " AS " + i + S.COLUMN_ITEMS_TYPE); projectionMap.put(i + S.COLUMN_ITEMS_RARITY, i + "." + S.COLUMN_ITEMS_RARITY + " AS " + i + S.COLUMN_ITEMS_RARITY); projectionMap.put(i + S.COLUMN_ITEMS_CARRY_CAPACITY, i + "." + S.COLUMN_ITEMS_CARRY_CAPACITY + " AS " + i + S.COLUMN_ITEMS_CARRY_CAPACITY); projectionMap.put(i + S.COLUMN_ITEMS_BUY, i + "." + S.COLUMN_ITEMS_BUY + " AS " + i + S.COLUMN_ITEMS_BUY); projectionMap.put(i + S.COLUMN_ITEMS_SELL, i + "." + S.COLUMN_ITEMS_SELL + " AS " + i + S.COLUMN_ITEMS_SELL); projectionMap.put(i + S.COLUMN_ITEMS_DESCRIPTION, i + "." + S.COLUMN_ITEMS_DESCRIPTION + " AS " + i + S.COLUMN_ITEMS_DESCRIPTION); projectionMap.put(i + S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME + " AS " + i + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(i + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX, i + "." + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX + " AS " + i + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX); } //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_COMBINING + " AS c" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS crt" + " ON " + "c." + S.COLUMN_COMBINING_CREATED_ITEM_ID + " = " + "crt." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS mat1" + " ON " + "c." + S.COLUMN_COMBINING_ITEM_1_ID + " = " + "mat1." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS mat2" + " ON " + "c." + S.COLUMN_COMBINING_ITEM_2_ID + " = " + "mat2." + S.COLUMN_ITEMS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* COMPONENT QUERIES ******************************************/ /* * Get all components for a created item */ public ComponentCursor queryComponentCreated(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_COMPONENTS; qh.Selection = "c." + S.COLUMN_COMPONENTS_CREATED_ITEM_ID + " = ? " + " AND " + "c." + S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID + " < " + S.SECTION_ARMOR; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ComponentCursor(wrapJoinHelper(builderComponent(), qh)); } /* * Get all components for a component item */ public ComponentCursor queryComponentComponent(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_COMPONENTS; qh.Selection = "c." + S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ComponentCursor(wrapJoinHelper(builderComponent(), qh)); } /* * Get all components for a created item and type */ public ComponentCursor queryComponentCreatedType(long id, String type) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_COMPONENTS; qh.Selection = "c." + S.COLUMN_COMPONENTS_CREATED_ITEM_ID + " = ? " + " AND " + "c." + S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID + " < " + S.SECTION_ARMOR + " AND " + "c." + S.COLUMN_COMPONENTS_TYPE + " = ?"; qh.SelectionArgs = new String[]{"" + id, type}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ComponentCursor(wrapJoinHelper(builderComponent(), qh)); } /* * Helper method to query for component */ private SQLiteQueryBuilder builderComponent() { // SELECT c._id AS _id, c.created_item_id, c.component_item_id, // c.quantity, c.type, cr.name AS crname, co.name AS coname // FROM components AS c // LEFT OUTER JOIN items AS cr ON c.created_item_id = cr._id // LEFT OUTER JOIN items AS co ON c.component_item_id = co._id; String c = "c"; String cr = "cr"; String co = "co"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", c + "." + S.COLUMN_COMPONENTS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_COMPONENTS_CREATED_ITEM_ID, c + "." + S.COLUMN_COMPONENTS_CREATED_ITEM_ID); projectionMap.put(S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID, c + "." + S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID); projectionMap.put(S.COLUMN_COMPONENTS_QUANTITY, c + "." + S.COLUMN_COMPONENTS_QUANTITY); projectionMap.put(S.COLUMN_COMPONENTS_TYPE, c + "." + S.COLUMN_COMPONENTS_TYPE); projectionMap.put(cr + S.COLUMN_ITEMS_NAME, cr + "." + S.COLUMN_ITEMS_NAME + " AS " + cr + S.COLUMN_ITEMS_NAME); projectionMap.put(cr + S.COLUMN_ITEMS_TYPE, cr + "." + S.COLUMN_ITEMS_TYPE + " AS " + cr + S.COLUMN_ITEMS_TYPE); projectionMap.put(cr + S.COLUMN_ITEMS_RARITY, cr + "." + S.COLUMN_ITEMS_RARITY + " AS " + cr + S.COLUMN_ITEMS_RARITY); projectionMap.put(cr + S.COLUMN_ITEMS_ICON_NAME, cr + "." + S.COLUMN_ITEMS_ICON_NAME + " AS " + cr + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(co + S.COLUMN_ITEMS_NAME, co + "." + S.COLUMN_ITEMS_NAME + " AS " + co + S.COLUMN_ITEMS_NAME); projectionMap.put(co + S.COLUMN_ITEMS_ICON_NAME, co + "." + S.COLUMN_ITEMS_ICON_NAME + " AS " + co + S.COLUMN_ITEMS_ICON_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_COMPONENTS + " AS c" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS cr" + " ON " + "c." + S.COLUMN_COMPONENTS_CREATED_ITEM_ID + " = " + "cr." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS co " + " ON " + "c." + S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID + " = " + "co." + S.COLUMN_ITEMS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* DECORATION QUERIES ******************************************/ /* * Get all decorations */ public DecorationCursor queryDecorations() { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_DECORATIONS; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new DecorationCursor(wrapJoinHelper(builderDecoration(), qh)); } /* * Get a specific decoration */ public DecorationCursor queryDecoration(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_DECORATIONS; qh.Selection = "i._id" + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new DecorationCursor(wrapJoinHelper(builderDecoration(), qh)); } /* * Helper method to query for decorations */ private SQLiteQueryBuilder builderDecoration() { // SELECT i._id AS item_id, i.name, i.jpn_name, i.type, i.rarity, i.carry_capacity, i.buy, i.sell, i.description, // i.icon_name, i.armor_dupe_name_fix, d.num_slots, s1._id AS skill_1_id, s1.name AS skill_1_name, its1.point_value // AS skill_1_point, s2._id AS skill_1_id, s2.name AS skill_2_name, its2.point_value AS skill_2_point // FROM decorations AS d LEFT OUTER JOIN items AS i ON d._id = i._id // LEFT OUTER JOIN item_to_skill_tree AS its1 ON i._id = its1.item_id and its1.point_value > 0 // LEFT OUTER JOIN skill_trees AS s1 ON its1.skill_tree_id = s1._id // LEFT OUTER JOIN item_to_skill_tree AS its2 ON i._id = its2.item_id and s1._id != its2.skill_tree_id // LEFT OUTER JOIN skill_trees AS s2 ON its2.skill_tree_id = s2._id; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", "i." + S.COLUMN_ITEMS_ID + " AS " + "_id"); projectionMap.put("item_name", "i." + S.COLUMN_ITEMS_NAME + " AS " + "item_name"); projectionMap.put(S.COLUMN_ITEMS_JPN_NAME, "i." + S.COLUMN_ITEMS_JPN_NAME); projectionMap.put(S.COLUMN_ITEMS_TYPE, "i." + S.COLUMN_ITEMS_TYPE); projectionMap.put(S.COLUMN_ITEMS_RARITY, "i." + S.COLUMN_ITEMS_RARITY); projectionMap.put(S.COLUMN_ITEMS_CARRY_CAPACITY, "i." + S.COLUMN_ITEMS_CARRY_CAPACITY); projectionMap.put(S.COLUMN_ITEMS_BUY, "i." + S.COLUMN_ITEMS_BUY); projectionMap.put(S.COLUMN_ITEMS_SELL, "i." + S.COLUMN_ITEMS_SELL); projectionMap.put(S.COLUMN_ITEMS_DESCRIPTION, "i." + S.COLUMN_ITEMS_DESCRIPTION); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, "i." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX, "i." + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX); projectionMap.put(S.COLUMN_DECORATIONS_NUM_SLOTS, "d." + S.COLUMN_DECORATIONS_NUM_SLOTS); projectionMap.put("skill_1_id", "s1." + S.COLUMN_SKILL_TREES_ID + " AS " + "skill_1_id"); projectionMap.put("skill_1_name", "s1." + S.COLUMN_SKILL_TREES_NAME + " AS " + "skill_1_name"); projectionMap.put("skill_1_point_value", "its1." + S.COLUMN_ITEM_TO_SKILL_TREE_POINT_VALUE + " AS " + "skill_1_point_value"); projectionMap.put("skill_2_id", "s2." + S.COLUMN_SKILL_TREES_ID + " AS " + "skill_2_id"); projectionMap.put("skill_2_name", "s2." + S.COLUMN_SKILL_TREES_NAME + " AS " + "skill_2_name"); projectionMap.put("skill_2_point_value", "its2." + S.COLUMN_ITEM_TO_SKILL_TREE_POINT_VALUE + " AS " + "skill_2_point_value"); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_DECORATIONS + " AS d" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "d." + S.COLUMN_DECORATIONS_ID + " = " + "i." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_ITEM_TO_SKILL_TREE + " AS its1 " + " ON " + "i." + S.COLUMN_ITEMS_ID + " = " + "its1." + S.COLUMN_ITEM_TO_SKILL_TREE_ITEM_ID + " AND " + "its1." + S.COLUMN_ITEM_TO_SKILL_TREE_POINT_VALUE + " > 0 " + " LEFT OUTER JOIN " + S.TABLE_SKILL_TREES + " AS s1" + " ON " + "its1." + S.COLUMN_ITEM_TO_SKILL_TREE_SKILL_TREE_ID + " = " + "s1." + S.COLUMN_SKILL_TREES_ID + " LEFT OUTER JOIN " + S.TABLE_ITEM_TO_SKILL_TREE + " AS its2 " + " ON " + "i." + S.COLUMN_ITEMS_ID + " = " + "its2." + S.COLUMN_ITEM_TO_SKILL_TREE_ITEM_ID + " AND " + "s1." + S.COLUMN_SKILL_TREES_ID + " != " + "its2." + S.COLUMN_ITEM_TO_SKILL_TREE_SKILL_TREE_ID + " LEFT OUTER JOIN " + S.TABLE_SKILL_TREES + " AS s2" + " ON " + "its2." + S.COLUMN_ITEM_TO_SKILL_TREE_SKILL_TREE_ID + " = " + "s2." + S.COLUMN_SKILL_TREES_ID ); QB.setProjectionMap(projectionMap); return QB; } /********************************* GATHERING QUERIES ******************************************/ /* * Get all gathering locations based on item */ public GatheringCursor queryGatheringItem(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_GATHERING; qh.Selection = "g." + S.COLUMN_GATHERING_ITEM_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new GatheringCursor(wrapJoinHelper(builderGathering(), qh)); } /* * Get all gathering items based on location */ public GatheringCursor queryGatheringLocation(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_GATHERING; qh.Selection = "g." + S.COLUMN_GATHERING_LOCATION_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new GatheringCursor(wrapJoinHelper(builderGathering(), qh)); } /* * Get all gathering items based on location and rank */ public GatheringCursor queryGatheringLocationRank(long id, String rank) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_GATHERING; qh.Selection = "g." + S.COLUMN_GATHERING_LOCATION_ID + " = ? " + "AND " + "g." + S.COLUMN_GATHERING_RANK + " = ? "; qh.SelectionArgs = new String[]{"" + id, rank}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new GatheringCursor(wrapJoinHelper(builderGathering(), qh)); } /* * Helper method to query for Gathering */ private SQLiteQueryBuilder builderGathering() { // SELECT g._id AS _id, g.item_id, g.location_id, g.area, // g.site, g.site_set, g.site_set_percentage, // g.site_set_gathers_min, g.site_set_gathers_max, g.rank, // g.percentage, i.name AS iname, l.name AS lname // FROM gathering AS g // LEFT OUTER JOIN items AS i ON g.item_id = i._id // LEFT OUTER JOIN locations AS l on g.location_id = l._id; String g = "g"; String i = "i"; String l = "l"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", g + "." + S.COLUMN_GATHERING_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_GATHERING_ITEM_ID, g + "." + S.COLUMN_GATHERING_ITEM_ID); projectionMap.put(S.COLUMN_GATHERING_LOCATION_ID, g + "." + S.COLUMN_GATHERING_LOCATION_ID); projectionMap.put(S.COLUMN_GATHERING_AREA, g + "." + S.COLUMN_GATHERING_AREA); projectionMap.put(S.COLUMN_GATHERING_SITE, g + "." + S.COLUMN_GATHERING_SITE); projectionMap.put(S.COLUMN_GATHERING_RANK, g + "." + S.COLUMN_GATHERING_RANK); projectionMap.put(i + S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME + " AS " + i + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(l + S.COLUMN_LOCATIONS_NAME, l + "." + S.COLUMN_LOCATIONS_NAME + " AS " + l + S.COLUMN_LOCATIONS_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_GATHERING + " AS g" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "g." + S.COLUMN_GATHERING_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_LOCATIONS + " AS l " + " ON " + "g." + S.COLUMN_GATHERING_LOCATION_ID + " = " + "l." + S.COLUMN_LOCATIONS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* HUNTING FLEET QUERIES ******************************************/ /* * Get all hunting fleets */ public HuntingFleetCursor queryHuntingFleets() { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_HUNTING_FLEET; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new HuntingFleetCursor(wrapJoinHelper(builderHuntingFleet(), qh)); } /* * Get a specific hunting fleet */ public HuntingFleetCursor queryHuntingFleet(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_HUNTING_FLEET; qh.Selection = "h." + S.COLUMN_HUNTING_FLEET_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new HuntingFleetCursor(wrapJoinHelper(builderHuntingFleet(), qh)); } /* * Get a specific hunting fleet based on type */ public HuntingFleetCursor queryHuntingFleetType(String type) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_HUNTING_FLEET; qh.Selection = "h." + S.COLUMN_HUNTING_FLEET_TYPE + " = ?"; qh.SelectionArgs = new String[]{ type }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new HuntingFleetCursor(wrapJoinHelper(builderHuntingFleet(), qh)); } /* * Get a specific hunting fleet based on location */ public HuntingFleetCursor queryHuntingFleetLocation(String location) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Selection = "h." + S.COLUMN_HUNTING_FLEET_LOCATION + " = ?"; qh.SelectionArgs = new String[]{ location }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new HuntingFleetCursor(wrapJoinHelper(builderHuntingFleet(), qh)); } /* * Helper method to query for hunting fleets */ private SQLiteQueryBuilder builderHuntingFleet() { // SELECT h._id AS _id, h.type AS htype, h.level, h.location, h.amount, h.percentage, h.rank, // h.item_id, i.name, i.jpn_name, i.type, i.rarity, i.carry_capacity, i.buy, i.sell, // i.description, i.icon_name, i.armor_dupe_name_fix // FROM hunting_fleet AS h LEFT OUTER JOIN items AS i ON h.item_id = i._id; String h = "h"; String i = "i"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", h + "." + S.COLUMN_HUNTING_FLEET_ID + " AS " + "_id"); projectionMap.put(h + S.COLUMN_HUNTING_FLEET_TYPE, h + "." + S.COLUMN_HUNTING_FLEET_TYPE + " AS " + h + S.COLUMN_HUNTING_FLEET_TYPE); projectionMap.put(S.COLUMN_HUNTING_FLEET_LEVEL, h + "." + S.COLUMN_HUNTING_FLEET_LEVEL); projectionMap.put(S.COLUMN_HUNTING_FLEET_LOCATION, h + "." + S.COLUMN_HUNTING_FLEET_LOCATION); projectionMap.put(S.COLUMN_HUNTING_FLEET_AMOUNT, h + "." + S.COLUMN_HUNTING_FLEET_AMOUNT); projectionMap.put(S.COLUMN_HUNTING_FLEET_PERCENTAGE, h + "." + S.COLUMN_HUNTING_FLEET_PERCENTAGE); projectionMap.put(S.COLUMN_HUNTING_FLEET_RANK, h + "." + S.COLUMN_HUNTING_FLEET_RANK); projectionMap.put(S.COLUMN_HUNTING_FLEET_ITEM_ID, h + "." + S.COLUMN_HUNTING_FLEET_ITEM_ID); projectionMap.put(S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_JPN_NAME, i + "." + S.COLUMN_ITEMS_JPN_NAME); projectionMap.put(i + S.COLUMN_ITEMS_TYPE, i + "." + S.COLUMN_ITEMS_TYPE + " AS " + i + S.COLUMN_ITEMS_TYPE); projectionMap.put(S.COLUMN_ITEMS_RARITY, i + "." + S.COLUMN_ITEMS_RARITY); projectionMap.put(S.COLUMN_ITEMS_CARRY_CAPACITY, i + "." + S.COLUMN_ITEMS_CARRY_CAPACITY); projectionMap.put(S.COLUMN_ITEMS_BUY, i + "." + S.COLUMN_ITEMS_BUY); projectionMap.put(S.COLUMN_ITEMS_SELL, i + "." + S.COLUMN_ITEMS_SELL); projectionMap.put(S.COLUMN_ITEMS_DESCRIPTION, i + "." + S.COLUMN_ITEMS_DESCRIPTION); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX, i + "." + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_HUNTING_FLEET + " AS h" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "h." + S.COLUMN_HUNTING_FLEET_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* HUNTING REWARD QUERIES ******************************************/ /* * Get all hunting reward monsters based on item */ public HuntingRewardCursor queryHuntingRewardItem(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_HUNTING_REWARDS; qh.Selection = "h." + S.COLUMN_HUNTING_REWARDS_ITEM_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = "m." + S.COLUMN_MONSTERS_ID + " ASC, " + "h." + S.COLUMN_HUNTING_REWARDS_RANK + " DESC, " + "h." + S.COLUMN_HUNTING_REWARDS_ID + " ASC"; qh.Limit = null; return new HuntingRewardCursor(wrapJoinHelper(builderHuntingReward(), qh)); } /* * Get all hunting reward items based on monster */ public HuntingRewardCursor queryHuntingRewardMonster(long[] ids) { String[] string_list = new String[ids.length]; for(int i = 0; i < ids.length; i++){ string_list[i] = String.valueOf(ids[i]); } QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_HUNTING_REWARDS; qh.Selection = "h." + S.COLUMN_HUNTING_REWARDS_MONSTER_ID + " IN (" + makePlaceholders(ids.length) + ")"; qh.SelectionArgs = string_list; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new HuntingRewardCursor(wrapJoinHelper(builderHuntingReward(), qh)); } /* * Get all hunting reward items based on monster and rank */ public HuntingRewardCursor queryHuntingRewardMonsterRank(long[] ids, String rank) { String[] string_list = new String[ids.length + 1]; for(int i = 0; i < ids.length; i++){ string_list[i] = String.valueOf(ids[i]); } string_list[ids.length] = rank; QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_HUNTING_REWARDS; qh.Selection = "h." + S.COLUMN_HUNTING_REWARDS_MONSTER_ID + " IN (" + makePlaceholders(ids.length) + ")" + " AND " + "h." + S.COLUMN_HUNTING_REWARDS_RANK + " = ? "; qh.SelectionArgs = string_list; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new HuntingRewardCursor(wrapJoinHelper(builderHuntingReward(), qh)); } /* * Helper method to query for HuntingReward */ private SQLiteQueryBuilder builderHuntingReward() { // SELECT h._id AS _id, h.item_id, h.monster_id, // h.condition, h.rank, h.stack_size, h.percentage, // i.name AS iname, m.name AS mname // FROM hunting_rewards AS h // LEFT OUTER JOIN items AS i ON h.item_id = i._id // LEFT OUTER JOIN monsters AS m ON h.monster_id = m._id; String h = "h"; String i = "i"; String m = "m"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", h + "." + S.COLUMN_HUNTING_REWARDS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_HUNTING_REWARDS_ITEM_ID, h + "." + S.COLUMN_HUNTING_REWARDS_ITEM_ID); projectionMap.put(S.COLUMN_HUNTING_REWARDS_MONSTER_ID, h + "." + S.COLUMN_HUNTING_REWARDS_MONSTER_ID); projectionMap.put(S.COLUMN_HUNTING_REWARDS_CONDITION, h + "." + S.COLUMN_HUNTING_REWARDS_CONDITION); projectionMap.put(S.COLUMN_HUNTING_REWARDS_RANK, h + "." + S.COLUMN_HUNTING_REWARDS_RANK); projectionMap.put(S.COLUMN_HUNTING_REWARDS_STACK_SIZE, h + "." + S.COLUMN_HUNTING_REWARDS_STACK_SIZE); projectionMap.put(S.COLUMN_HUNTING_REWARDS_PERCENTAGE, h + "." + S.COLUMN_HUNTING_REWARDS_PERCENTAGE); projectionMap.put(i + S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME + " AS " + i + S.COLUMN_ITEMS_NAME); projectionMap.put(i + S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME + " AS " + i + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(m + S.COLUMN_MONSTERS_NAME, m + "." + S.COLUMN_MONSTERS_NAME + " AS " + m + S.COLUMN_MONSTERS_NAME); projectionMap.put(S.COLUMN_MONSTERS_TRAIT, m + "." + S.COLUMN_MONSTERS_TRAIT); projectionMap.put(m + S.COLUMN_MONSTERS_FILE_LOCATION, m + "." + S.COLUMN_MONSTERS_FILE_LOCATION + " AS " + m + S.COLUMN_MONSTERS_FILE_LOCATION); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_HUNTING_REWARDS + " AS h" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "h." + S.COLUMN_HUNTING_REWARDS_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_MONSTERS + " AS m " + " ON " + "h." + S.COLUMN_HUNTING_REWARDS_MONSTER_ID + " = " + "m." + S.COLUMN_MONSTERS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* ITEM QUERIES ******************************************/ /* * Get all items */ public ItemCursor queryItems() { // "SELECT DISTINCT * FROM items GROUP BY name LIMIT 1114" QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_ITEMS; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1114"; return new ItemCursor(wrapHelper(qh)); } /* * Get a specific item */ public ItemCursor queryItem(long id) { // "SELECT DISTINCT * FROM items WHERE _id = id LIMIT 1" QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_ITEMS; qh.Columns = null; qh.Selection = S.COLUMN_ITEMS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new ItemCursor(wrapHelper(qh)); } /* * Get items based on search text */ public ItemCursor queryItemSearch(String search) { // "SELECT * FROM items WHERE name LIKE %?%" QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_ITEMS; qh.Columns = null; qh.Selection = S.COLUMN_ITEMS_NAME + " LIKE ?"; qh.SelectionArgs = new String[]{ '%' + search + '%'}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ItemCursor(wrapHelper(qh)); } /********************************* ITEM TO SKILL TREE QUERIES ******************************************/ /* * Get all skills based on item */ public ItemToSkillTreeCursor queryItemToSkillTreeItem(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Selection = "itst." + S.COLUMN_ITEM_TO_SKILL_TREE_ITEM_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ItemToSkillTreeCursor(wrapJoinHelper(builderItemToSkillTree(), qh)); } /* * Get all items based on skill tree */ public ItemToSkillTreeCursor queryItemToSkillTreeSkillTree(long id, String type) { String queryType = ""; if (type.equals("Decoration")) { queryType = "i." + S.COLUMN_ITEMS_TYPE; } else { queryType = "a." + S.COLUMN_ARMOR_SLOT; } QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_ITEM_TO_SKILL_TREE; qh.Selection = "itst." + S.COLUMN_ITEM_TO_SKILL_TREE_SKILL_TREE_ID + " = ? " + " AND " + queryType + " = ? "; qh.SelectionArgs = new String[]{"" + id, type}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new ItemToSkillTreeCursor(wrapJoinHelper(builderItemToSkillTree(), qh)); } /* * Helper method to query for ItemToSkillTree */ private SQLiteQueryBuilder builderItemToSkillTree() { // SELECT itst._id AS _id, itst.item_id, itst.skill_tree_id, // itst.point_value, i.name AS iname, s.name AS sname // FROM item_to_skill_tree AS itst // LEFT OUTER JOIN items AS i ON itst.item_id = i._id // LEFT OUTER JOIN skill_trees AS s ON itst.skill_tree_id = s._id; // LEFT OUTER JOIN armor AS a ON i._id = a._id // LEFT OUTER JOIN decorations AS d ON i._id = d._id; String itst = "itst"; String i = "i"; String s = "s"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", itst + "." + S.COLUMN_ITEM_TO_SKILL_TREE_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_ITEM_TO_SKILL_TREE_ITEM_ID, itst + "." + S.COLUMN_ITEM_TO_SKILL_TREE_ITEM_ID); projectionMap.put(S.COLUMN_ITEM_TO_SKILL_TREE_SKILL_TREE_ID, itst + "." + S.COLUMN_ITEM_TO_SKILL_TREE_SKILL_TREE_ID); projectionMap.put(S.COLUMN_ITEM_TO_SKILL_TREE_POINT_VALUE, itst + "." + S.COLUMN_ITEM_TO_SKILL_TREE_POINT_VALUE); projectionMap.put(i + S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME + " AS " + i + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(S.COLUMN_ITEMS_TYPE, i + "." + S.COLUMN_ITEMS_TYPE); projectionMap.put(S.COLUMN_ITEMS_RARITY, i + "." + S.COLUMN_ITEMS_RARITY); projectionMap.put(s + S.COLUMN_SKILL_TREES_NAME, s + "." + S.COLUMN_SKILL_TREES_NAME + " AS " + s + S.COLUMN_SKILL_TREES_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_ITEM_TO_SKILL_TREE + " AS itst" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "itst." + S.COLUMN_ITEM_TO_SKILL_TREE_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_SKILL_TREES + " AS s " + " ON " + "itst." + S.COLUMN_ITEM_TO_SKILL_TREE_SKILL_TREE_ID + " = " + "s." + S.COLUMN_SKILL_TREES_ID + " LEFT OUTER JOIN " + S.TABLE_ARMOR + " AS a" + " ON " + "i." + S.COLUMN_ITEMS_ID + " = " + "a." + S.COLUMN_ARMOR_ID + " LEFT OUTER JOIN " + S.TABLE_DECORATIONS + " AS d" + " ON " + "i." + S.COLUMN_ITEMS_ID + " = " + "d." + S.COLUMN_DECORATIONS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* LOCATION QUERIES ******************************************/ /* * Get all locations */ public LocationCursor queryLocations() { // "SELECT DISTINCT * FROM locations GROUP BY name" QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_LOCATIONS; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new LocationCursor(wrapHelper(qh)); } /* * Get a specific location */ public LocationCursor queryLocation(long id) { // "SELECT DISTINCT * FROM locations WHERE _id = id LIMIT 1" QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_LOCATIONS; qh.Columns = null; qh.Selection = S.COLUMN_LOCATIONS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new LocationCursor(wrapHelper(qh)); } /********************************* MOGA WOODS REWARD QUERIES ******************************************/ /* * Get all moga woods reward monsters based on item */ public MogaWoodsRewardCursor queryMogaWoodsRewardItem(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_MOGA_WOODS_REWARDS; qh.Selection = "mwr." + S.COLUMN_MOGA_WOODS_REWARDS_ITEM_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MogaWoodsRewardCursor(wrapJoinHelper(builderMogaWoodsReward(), qh)); } /* * Get all moga woods reward items based on monster */ public MogaWoodsRewardCursor queryMogaWoodsRewardMonster(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Selection = "mwr." + S.COLUMN_MOGA_WOODS_REWARDS_MONSTER_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MogaWoodsRewardCursor(wrapJoinHelper(builderMogaWoodsReward(), qh)); } /* * Get all moga woods reward items based on monster and time */ public MogaWoodsRewardCursor queryMogaWoodsRewardMonsterTime(long id, String time) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_MOGA_WOODS_REWARDS; qh.Selection = "mwr." + S.COLUMN_MOGA_WOODS_REWARDS_MONSTER_ID + " = ? " + "AND " + "mwr." + S.COLUMN_MOGA_WOODS_REWARDS_TIME + " = ? "; qh.SelectionArgs = new String[]{"" + id, time}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MogaWoodsRewardCursor(wrapJoinHelper(builderMogaWoodsReward(), qh)); } /* * Helper method to query for MogaWoods */ private SQLiteQueryBuilder builderMogaWoodsReward() { // SELECT mwr._id AS _id, mwr.monster_id, mwr.item_id, // mwr.time, mwr.commodity_stars, mwr.kill_percentage, // mwr.capture_percentage, // i.name AS iname, m.name AS mname // FROM moga_woods_rewards AS mwr // LEFT OUTER JOIN monsters AS m ON mwr.monster_id = m._id // LEFT OUTER JOIN items AS i ON mwr.item_id = i._id; String mwr = "mwr"; String i = "i"; String m = "m"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", mwr + "." + S.COLUMN_MOGA_WOODS_REWARDS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_MOGA_WOODS_REWARDS_ITEM_ID, mwr + "." + S.COLUMN_MOGA_WOODS_REWARDS_ITEM_ID); projectionMap.put(S.COLUMN_MOGA_WOODS_REWARDS_MONSTER_ID, mwr + "." + S.COLUMN_MOGA_WOODS_REWARDS_MONSTER_ID); projectionMap.put(S.COLUMN_MOGA_WOODS_REWARDS_TIME, mwr + "." + S.COLUMN_MOGA_WOODS_REWARDS_TIME); projectionMap.put(S.COLUMN_MOGA_WOODS_REWARDS_COMMODITY_STARS, mwr + "." + S.COLUMN_MOGA_WOODS_REWARDS_COMMODITY_STARS); projectionMap.put(S.COLUMN_MOGA_WOODS_REWARDS_KILL_PERCENTAGE, mwr + "." + S.COLUMN_MOGA_WOODS_REWARDS_KILL_PERCENTAGE); projectionMap.put(S.COLUMN_MOGA_WOODS_REWARDS_CAPTURE_PERCENTAGE, mwr + "." + S.COLUMN_MOGA_WOODS_REWARDS_CAPTURE_PERCENTAGE); projectionMap.put(i + S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME + " AS " + i + S.COLUMN_ITEMS_NAME); projectionMap.put(i + S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME + " AS " + i + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(m + S.COLUMN_MONSTERS_NAME, m + "." + S.COLUMN_MONSTERS_NAME + " AS " + m + S.COLUMN_MONSTERS_NAME); projectionMap.put(m + S.COLUMN_MONSTERS_FILE_LOCATION, m + "." + S.COLUMN_MONSTERS_FILE_LOCATION + " AS " + m + S.COLUMN_MONSTERS_FILE_LOCATION); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_MOGA_WOODS_REWARDS + " AS mwr" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "mwr." + S.COLUMN_MOGA_WOODS_REWARDS_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_MONSTERS + " AS m " + " ON " + "mwr." + S.COLUMN_MOGA_WOODS_REWARDS_MONSTER_ID + " = " + "m." + S.COLUMN_MONSTERS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* MONSTER QUERIES ******************************************/ /* * Get all monsters */ public MonsterCursor queryMonsters() { // "SELECT DISTINCT * FROM monsters GROUP BY name" QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_MONSTERS; qh.Columns = null; qh.Selection = S.COLUMN_MONSTERS_TRAIT + " = '' "; qh.SelectionArgs = null; qh.GroupBy = S.COLUMN_MONSTERS_SORT_NAME; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterCursor(wrapHelper(qh)); } /* * Get all small monsters */ public MonsterCursor querySmallMonsters() { // "SELECT DISTINCT * FROM monsters WHERE class = 'Minion' GROUP BY name" QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_MONSTERS; qh.Columns = null; qh.Selection = S.COLUMN_MONSTERS_CLASS + " = ?" + " AND " + S.COLUMN_MONSTERS_TRAIT + " = '' "; qh.SelectionArgs = new String[] {"Minion"}; qh.GroupBy = S.COLUMN_MONSTERS_SORT_NAME; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterCursor(wrapHelper(qh)); } /* * Get all large monsters */ public MonsterCursor queryLargeMonsters() { // "SELECT DISTINCT * FROM monsters WHERE class = 'Boss' GROUP BY name" QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_MONSTERS; qh.Columns = null; qh.Selection = S.COLUMN_MONSTERS_CLASS + " = ?" + " AND " + S.COLUMN_MONSTERS_TRAIT + " = '' "; qh.SelectionArgs = new String[] {"Boss"}; qh.GroupBy = S.COLUMN_MONSTERS_SORT_NAME; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterCursor(wrapHelper(qh)); } /* * Get a specific monster */ public MonsterCursor queryMonster(long id) { // "SELECT DISTINCT * FROM monsters WHERE _id = id LIMIT 1" QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_MONSTERS; qh.Columns = null; qh.Selection = S.COLUMN_MONSTERS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new MonsterCursor(wrapHelper(qh)); } /* * Get all traits from same monsters */ public MonsterCursor queryMonsterTrait(String name) { // "SELECT * FROM monsters WHERE _id = ? AND trait != ''" QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_MONSTERS; qh.Columns = null; qh.Selection = S.COLUMN_MONSTERS_NAME + " = ?" + " AND " + S.COLUMN_MONSTERS_TRAIT + " != '' "; qh.SelectionArgs = new String[] {name}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterCursor(wrapHelper(qh)); } /********************************* MONSTER DAMAGE QUERIES ******************************************/ /* * Get all monster damage for a monster */ public MonsterDamageCursor queryMonsterDamage(long id) { // "SELECT * FROM monster_damage WHERE monster_id = id" QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_MONSTER_DAMAGE; qh.Columns = null; qh.Selection = S.COLUMN_MONSTER_DAMAGE_MONSTER_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterDamageCursor(wrapHelper(qh)); } /********************************* MONSTER TO ARENA QUERIES ******************************************/ /* * Get all arena quests based on monster */ public MonsterToArenaCursor queryMonsterToArenaMonster(long id) { QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_MONSTER_TO_ARENA; qh.Columns = null; qh.Selection = "mta." + S.COLUMN_MONSTER_TO_ARENA_MONSTER_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = "a." + S.COLUMN_ARENA_QUESTS_NAME; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterToArenaCursor(wrapJoinHelper(builderMonsterToArena(qh.Distinct), qh)); } /* * Get all monsters based on arena quest */ public MonsterToArenaCursor queryMonsterToArenaArena(long id) { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_MONSTER_TO_ARENA; qh.Columns = null; qh.Selection = "mta." + S.COLUMN_MONSTER_TO_ARENA_ARENA_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterToArenaCursor(wrapJoinHelper(builderMonsterToArena(qh.Distinct), qh)); } /* * Helper method to query for MonsterToArena */ private SQLiteQueryBuilder builderMonsterToArena(boolean Distinct) { // SELECT mta._id AS _id, mta.monster_id, mta.arena_id, // m.name AS mname, a.name AS aname, // FROM monster_to_arena AS mta // LEFT OUTER JOIN monsters AS m ON mta.monster_id = m._id // LEFT OUTER JOIN arena_quests AS a ON mta.arena_id = a._id; String mta = "mta"; String m = "m"; String a = "a"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", mta + "." + S.COLUMN_MONSTER_TO_ARENA_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_MONSTER_TO_ARENA_ID, mta + "." + S.COLUMN_MONSTER_TO_ARENA_ID); projectionMap.put(S.COLUMN_MONSTER_TO_ARENA_MONSTER_ID, mta + "." + S.COLUMN_MONSTER_TO_ARENA_MONSTER_ID); projectionMap.put(S.COLUMN_MONSTER_TO_ARENA_ARENA_ID, mta + "." + S.COLUMN_MONSTER_TO_ARENA_ARENA_ID); projectionMap.put(m + S.COLUMN_MONSTERS_NAME, m + "." + S.COLUMN_MONSTERS_NAME + " AS " + m + S.COLUMN_MONSTERS_NAME); projectionMap.put(S.COLUMN_MONSTERS_TRAIT, m + "." + S.COLUMN_MONSTERS_TRAIT); projectionMap.put(S.COLUMN_MONSTERS_FILE_LOCATION, m + "." + S.COLUMN_MONSTERS_FILE_LOCATION); projectionMap.put(a + S.COLUMN_ARENA_QUESTS_NAME, a + "." + S.COLUMN_ARENA_QUESTS_NAME + " AS " + a + S.COLUMN_ARENA_QUESTS_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_MONSTER_TO_ARENA + " AS mta" + " LEFT OUTER JOIN " + S.TABLE_MONSTERS + " AS m" + " ON " + "mta." + S.COLUMN_MONSTER_TO_ARENA_MONSTER_ID + " = " + "m." + S.COLUMN_MONSTERS_ID + " LEFT OUTER JOIN " + S.TABLE_ARENA_QUESTS + " AS a " + " ON " + "mta." + S.COLUMN_MONSTER_TO_ARENA_ARENA_ID + " = " + "a." + S.COLUMN_ARENA_QUESTS_ID); QB.setDistinct(Distinct); QB.setProjectionMap(projectionMap); return QB; } /********************************* MONSTER TO QUEST QUERIES ******************************************/ /* * Get all quests based on monster */ public MonsterToQuestCursor queryMonsterToQuestMonster(long id) { QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_MONSTER_TO_QUEST; qh.Columns = null; qh.Selection = "mtq." + S.COLUMN_MONSTER_TO_QUEST_MONSTER_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = "q." + S.COLUMN_QUESTS_NAME; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterToQuestCursor(wrapJoinHelper(builderMonsterToQuest(qh.Distinct), qh)); } /* * Get all monsters based on quest */ public MonsterToQuestCursor queryMonsterToQuestQuest(long id) { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_MONSTER_TO_QUEST; qh.Columns = null; qh.Selection = "mtq." + S.COLUMN_MONSTER_TO_QUEST_QUEST_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new MonsterToQuestCursor(wrapJoinHelper(builderMonsterToQuest(qh.Distinct), qh)); } /* * Helper method to query for MonsterToQuest */ private SQLiteQueryBuilder builderMonsterToQuest(boolean Distinct) { // SELECT mtq._id AS _id, mtq.monster_id, mtq.quest_id, // mtq.unstable, m.name AS mname, q.name AS qname, // q.hub, q.stars // FROM monster_to_quest AS mtq // LEFT OUTER JOIN monsters AS m ON mtq.monster_id = m._id // LEFT OUTER JOIN quests AS q ON mtq.quest_id = q._id; String mtq = "mtq"; String m = "m"; String q = "q"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", mtq + "." + S.COLUMN_MONSTER_TO_QUEST_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_MONSTER_TO_QUEST_MONSTER_ID, mtq + "." + S.COLUMN_MONSTER_TO_QUEST_MONSTER_ID); projectionMap.put(S.COLUMN_MONSTER_TO_QUEST_QUEST_ID, mtq + "." + S.COLUMN_MONSTER_TO_QUEST_QUEST_ID); projectionMap.put(S.COLUMN_MONSTER_TO_QUEST_UNSTABLE, mtq + "." + S.COLUMN_MONSTER_TO_QUEST_UNSTABLE); projectionMap.put(m + S.COLUMN_MONSTERS_NAME, m + "." + S.COLUMN_MONSTERS_NAME + " AS " + m + S.COLUMN_MONSTERS_NAME); projectionMap.put(S.COLUMN_MONSTERS_TRAIT, m + "." + S.COLUMN_MONSTERS_TRAIT); projectionMap.put(S.COLUMN_MONSTERS_FILE_LOCATION, m + "." + S.COLUMN_MONSTERS_FILE_LOCATION); projectionMap.put(q + S.COLUMN_QUESTS_NAME, q + "." + S.COLUMN_QUESTS_NAME + " AS " + q + S.COLUMN_QUESTS_NAME); projectionMap.put(S.COLUMN_QUESTS_HUB, q + "." + S.COLUMN_QUESTS_HUB); projectionMap.put(S.COLUMN_QUESTS_STARS, q + "." + S.COLUMN_QUESTS_STARS); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_MONSTER_TO_QUEST + " AS mtq" + " LEFT OUTER JOIN " + S.TABLE_MONSTERS + " AS m" + " ON " + "mtq." + S.COLUMN_MONSTER_TO_QUEST_MONSTER_ID + " = " + "m." + S.COLUMN_MONSTERS_ID + " LEFT OUTER JOIN " + S.TABLE_QUESTS + " AS q " + " ON " + "mtq." + S.COLUMN_MONSTER_TO_QUEST_QUEST_ID + " = " + "q." + S.COLUMN_QUESTS_ID); QB.setDistinct(Distinct); QB.setProjectionMap(projectionMap); return QB; } /********************************* QUEST QUERIES ******************************************/ /* * Get all quests */ public QuestCursor queryQuests() { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_QUESTS; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new QuestCursor(wrapJoinHelper(builderQuest(), qh)); } /* * Get a specific quest */ public QuestCursor queryQuest(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_QUESTS; qh.Selection = "q." + S.COLUMN_QUESTS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new QuestCursor(wrapJoinHelper(builderQuest(), qh)); } /* * Get a specific quest based on hub */ public QuestCursor queryQuestHub(String hub) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_QUESTS; qh.Selection = "q." + S.COLUMN_QUESTS_HUB + " = ?"; qh.SelectionArgs = new String[]{ hub }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new QuestCursor(wrapJoinHelper(builderQuest(), qh)); } /* * Get a specific quest based on hub and stars */ public QuestCursor queryQuestHubStar(String hub, String stars) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_QUESTS; qh.Selection = "q." + S.COLUMN_QUESTS_HUB + " = ?" + " AND " + "q." + S.COLUMN_QUESTS_STARS + " = ?"; qh.SelectionArgs = new String[]{ hub, stars }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new QuestCursor(wrapJoinHelper(builderQuest(), qh)); } /* * Helper method to query for quests */ private SQLiteQueryBuilder builderQuest() { // SELECT q._id AS _id, q.name AS qname, q.goal, q.hub, q.type, q.stars, q.location_id, q.time_limit, // q.fee, q.reward, q.hrp, l.name AS lname, l.map // FROM quests AS q LEFT OUTER JOIN locations AS l ON q.location_id = l._id; String q = "q"; String l = "l"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", q + "." + S.COLUMN_QUESTS_ID + " AS " + "_id"); projectionMap.put(q + S.COLUMN_QUESTS_NAME, q + "." + S.COLUMN_QUESTS_NAME + " AS " + q + S.COLUMN_QUESTS_NAME); projectionMap.put(S.COLUMN_QUESTS_GOAL, q + "." + S.COLUMN_QUESTS_GOAL); projectionMap.put(S.COLUMN_QUESTS_HUB, q + "." + S.COLUMN_QUESTS_HUB); projectionMap.put(S.COLUMN_QUESTS_TYPE, q + "." + S.COLUMN_QUESTS_TYPE); projectionMap.put(S.COLUMN_QUESTS_STARS, q + "." + S.COLUMN_QUESTS_STARS); projectionMap.put(S.COLUMN_QUESTS_LOCATION_ID, q + "." + S.COLUMN_QUESTS_LOCATION_ID); projectionMap.put(S.COLUMN_QUESTS_LOCATION_TIME, q + "." + S.COLUMN_QUESTS_LOCATION_TIME); projectionMap.put(S.COLUMN_QUESTS_TIME_LIMIT, q + "." + S.COLUMN_QUESTS_TIME_LIMIT); projectionMap.put(S.COLUMN_QUESTS_FEE, q + "." + S.COLUMN_QUESTS_FEE); projectionMap.put(S.COLUMN_QUESTS_REWARD, q + "." + S.COLUMN_QUESTS_REWARD); projectionMap.put(S.COLUMN_QUESTS_HRP, q + "." + S.COLUMN_QUESTS_HRP); projectionMap.put(l + S.COLUMN_LOCATIONS_NAME, l + "." + S.COLUMN_LOCATIONS_NAME + " AS " + l + S.COLUMN_LOCATIONS_NAME); projectionMap.put(S.COLUMN_LOCATIONS_MAP, l + "." + S.COLUMN_LOCATIONS_MAP); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_QUESTS + " AS q" + " LEFT OUTER JOIN " + S.TABLE_LOCATIONS + " AS l" + " ON " + "q." + S.COLUMN_QUESTS_LOCATION_ID + " = " + "l." + S.COLUMN_LOCATIONS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* QUEST REWARD QUERIES ******************************************/ /* * Get all quest reward quests based on item */ public QuestRewardCursor queryQuestRewardItem(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_QUEST_REWARDS; qh.Selection = "qr." + S.COLUMN_QUEST_REWARDS_ITEM_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = "qr." + S.COLUMN_QUEST_REWARDS_PERCENTAGE + " DESC"; qh.Limit = null; return new QuestRewardCursor(wrapJoinHelper(builderQuestReward(), qh)); } /* * Get all quest reward items based on quest */ public QuestRewardCursor queryQuestRewardQuest(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_QUEST_REWARDS; qh.Selection = "qr." + S.COLUMN_QUEST_REWARDS_QUEST_ID + " = ? "; qh.SelectionArgs = new String[]{"" + id}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new QuestRewardCursor(wrapJoinHelper(builderQuestReward(), qh)); } /* * Helper method to query for QuestReward */ private SQLiteQueryBuilder builderQuestReward() { // SELECT qr._id AS _id, qr.quest_id, qr.item_id, // qr.reward_slot, qr.percentage, qr.stack_size, // q.name AS qname, q.hub, q.stars, i.name AS iname // FROM quest_rewards AS qr // LEFT OUTER JOIN quests AS q ON qr.quest_id = q._id // LEFT OUTER JOIN items AS i ON qr.item_id = i._id; String qr = "qr"; String i = "i"; String q = "q"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", qr + "." + S.COLUMN_QUEST_REWARDS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_QUEST_REWARDS_ITEM_ID, qr + "." + S.COLUMN_QUEST_REWARDS_ITEM_ID); projectionMap.put(S.COLUMN_QUEST_REWARDS_QUEST_ID, qr + "." + S.COLUMN_QUEST_REWARDS_QUEST_ID); projectionMap.put(S.COLUMN_QUEST_REWARDS_REWARD_SLOT, qr + "." + S.COLUMN_QUEST_REWARDS_REWARD_SLOT); projectionMap.put(S.COLUMN_QUEST_REWARDS_PERCENTAGE, qr + "." + S.COLUMN_QUEST_REWARDS_PERCENTAGE); projectionMap.put(S.COLUMN_QUEST_REWARDS_STACK_SIZE, qr + "." + S.COLUMN_QUEST_REWARDS_STACK_SIZE); projectionMap.put(i + S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME + " AS " + i + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(q + S.COLUMN_QUESTS_NAME, q + "." + S.COLUMN_QUESTS_NAME + " AS " + q + S.COLUMN_QUESTS_NAME); projectionMap.put(S.COLUMN_QUESTS_HUB, q + "." + S.COLUMN_QUESTS_HUB); projectionMap.put(S.COLUMN_QUESTS_STARS, q + "." + S.COLUMN_QUESTS_STARS); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_QUEST_REWARDS + " AS qr" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "qr." + S.COLUMN_QUEST_REWARDS_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID + " LEFT OUTER JOIN " + S.TABLE_QUESTS + " AS q " + " ON " + "qr." + S.COLUMN_QUEST_REWARDS_QUEST_ID + " = " + "q." + S.COLUMN_QUESTS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* SKILL QUERIES ******************************************/ // public SkillCursor querySkill(long id) { // // "SELECT * FROM skills WHERE skill_id = id" // // _Distinct = false; // _Table = S.TABLE_SKILLS; // _Columns = null; // _Selection = S.COLUMN_SKILLS_ID + " = ?"; // _SelectionArgs = new String[]{ String.valueOf(id) }; // _GroupBy = null; // _Having = null; // _OrderBy = null; // _Limit = null; // // return new SkillCursor(wrapHelper()); // } /* * Get all skills for a skill tree */ public SkillCursor querySkillFromTree(long id) { // "SELECT * FROM skills WHERE skill_tree_id = id" QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_SKILLS; qh.Columns = null; qh.Selection = S.COLUMN_SKILLS_SKILL_TREE_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new SkillCursor(wrapHelper(qh)); } /********************************* SKILL TREE QUERIES ******************************************/ /* * Get all skill tress */ public SkillTreeCursor querySkillTrees() { // "SELECT DISTINCT * FROM skill_trees GROUP BY name" QueryHelper qh = new QueryHelper(); qh.Distinct = true; qh.Table = S.TABLE_SKILL_TREES; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = S.COLUMN_SKILL_TREES_NAME; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new SkillTreeCursor(wrapHelper(qh)); } /* * Get a specific skill tree */ public SkillTreeCursor querySkillTree(long id) { // "SELECT DISTINCT * FROM skill_trees WHERE _id = id LIMIT 1" QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_SKILL_TREES; qh.Columns = null; qh.Selection = S.COLUMN_SKILL_TREES_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new SkillTreeCursor(wrapHelper(qh)); } /********************************* WEAPON QUERIES ******************************************/ /* * Get all weapon */ public WeaponCursor queryWeapon() { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_WEAPONS; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new WeaponCursor(wrapJoinHelper(builderWeapon(), qh)); } /* * Get a specific weapon */ public WeaponCursor queryWeapon(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_WEAPONS; qh.Selection = "w." + S.COLUMN_WEAPONS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new WeaponCursor(wrapJoinHelper(builderWeapon(), qh)); } /* * Get multiple specific weapon */ public WeaponCursor queryWeapons(long[] ids) { String[] string_list = new String[ids.length]; for(int i = 0; i < ids.length; i++){ string_list[i] = String.valueOf(ids[i]); } QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_WEAPONS; qh.Selection = "w." + S.COLUMN_WEAPONS_ID + " IN (" + makePlaceholders(ids.length) + ")"; qh.SelectionArgs = string_list; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new WeaponCursor(wrapJoinHelper(builderWeapon(), qh)); } /* * Get a specific weapon based on weapon type */ public WeaponCursor queryWeaponType(String type) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Table = S.TABLE_WEAPONS; qh.Selection = "w." + S.COLUMN_WEAPONS_WTYPE + " = ? "; qh.SelectionArgs = new String[]{type}; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new WeaponCursor(wrapJoinHelper(builderWeapon(), qh)); } /* * Helper method to query for weapon */ private SQLiteQueryBuilder builderWeapon() { // SELECT w._id AS _id, w.wtype, w.creation_cost, w.upgrade_cost, w.attack, w.max_attack, // w.elemental_attack, w.awakened_elemental_attack, w.defense, w.sharpness, w.affinity, // w.horn_notes, w.shelling_type, w.charge_levels, w.allowed_coatings, w.recoil, w.reload_speed, // w.rapid_fire, w.normal_shots, w.status_shots, w.elemental_shots, w.tool_shots, w.num_slots, // w.sharpness_file, // i.name, i.jpn_name, i.type, i.rarity, i.carry_capacity, i.buy, i.sell, i.description, // i.icon_name, i.armor_dupe_name_fix // FROM weapons AS w LEFT OUTER JOIN items AS i ON w._id = i._id; String w = "w"; String i = "i"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", w + "." + S.COLUMN_WEAPONS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_WEAPONS_WTYPE, w + "." + S.COLUMN_WEAPONS_WTYPE); projectionMap.put(S.COLUMN_WEAPONS_CREATION_COST, w + "." + S.COLUMN_WEAPONS_CREATION_COST); projectionMap.put(S.COLUMN_WEAPONS_UPGRADE_COST, w + "." + S.COLUMN_WEAPONS_UPGRADE_COST); projectionMap.put(S.COLUMN_WEAPONS_ATTACK, w + "." + S.COLUMN_WEAPONS_ATTACK); projectionMap.put(S.COLUMN_WEAPONS_MAX_ATTACK, w + "." + S.COLUMN_WEAPONS_MAX_ATTACK); projectionMap.put(S.COLUMN_WEAPONS_ELEMENTAL_ATTACK, w + "." + S.COLUMN_WEAPONS_ELEMENTAL_ATTACK); projectionMap.put(S.COLUMN_WEAPONS_AWAKENED_ELEMENTAL_ATTACK, w + "." + S.COLUMN_WEAPONS_AWAKENED_ELEMENTAL_ATTACK); projectionMap.put(S.COLUMN_WEAPONS_DEFENSE, w + "." + S.COLUMN_WEAPONS_DEFENSE); projectionMap.put(S.COLUMN_WEAPONS_SHARPNESS, w + "." + S.COLUMN_WEAPONS_SHARPNESS); projectionMap.put(S.COLUMN_WEAPONS_AFFINITY, w + "." + S.COLUMN_WEAPONS_AFFINITY); projectionMap.put(S.COLUMN_WEAPONS_HORN_NOTES, w + "." + S.COLUMN_WEAPONS_HORN_NOTES); projectionMap.put(S.COLUMN_WEAPONS_SHELLING_TYPE, w + "." + S.COLUMN_WEAPONS_SHELLING_TYPE); projectionMap.put(S.COLUMN_WEAPONS_PHIAL, w + "." + S.COLUMN_WEAPONS_PHIAL); projectionMap.put(S.COLUMN_WEAPONS_CHARGES, w + "." + S.COLUMN_WEAPONS_CHARGES); projectionMap.put(S.COLUMN_WEAPONS_COATINGS, w + "." + S.COLUMN_WEAPONS_COATINGS); projectionMap.put(S.COLUMN_WEAPONS_RECOIL, w + "." + S.COLUMN_WEAPONS_RECOIL); projectionMap.put(S.COLUMN_WEAPONS_RELOAD_SPEED, w + "." + S.COLUMN_WEAPONS_RELOAD_SPEED); projectionMap.put(S.COLUMN_WEAPONS_RAPID_FIRE, w + "." + S.COLUMN_WEAPONS_RAPID_FIRE); projectionMap.put(S.COLUMN_WEAPONS_DEVIATION, w + "." + S.COLUMN_WEAPONS_DEVIATION); projectionMap.put(S.COLUMN_WEAPONS_AMMO, w + "." + S.COLUMN_WEAPONS_AMMO); projectionMap.put(S.COLUMN_WEAPONS_NUM_SLOTS, w + "." + S.COLUMN_WEAPONS_NUM_SLOTS); projectionMap.put(S.COLUMN_WEAPONS_SHARPNESS_FILE, w + "." + S.COLUMN_WEAPONS_SHARPNESS_FILE); projectionMap.put(S.COLUMN_WEAPONS_FINAL, w + "." + S.COLUMN_WEAPONS_FINAL); projectionMap.put(S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_JPN_NAME, i + "." + S.COLUMN_ITEMS_JPN_NAME); projectionMap.put(S.COLUMN_ITEMS_TYPE, i + "." + S.COLUMN_ITEMS_TYPE); projectionMap.put(S.COLUMN_ITEMS_RARITY, i + "." + S.COLUMN_ITEMS_RARITY); projectionMap.put(S.COLUMN_ITEMS_CARRY_CAPACITY, i + "." + S.COLUMN_ITEMS_CARRY_CAPACITY); projectionMap.put(S.COLUMN_ITEMS_BUY, i + "." + S.COLUMN_ITEMS_BUY); projectionMap.put(S.COLUMN_ITEMS_SELL, i + "." + S.COLUMN_ITEMS_SELL); projectionMap.put(S.COLUMN_ITEMS_DESCRIPTION, i + "." + S.COLUMN_ITEMS_DESCRIPTION); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX, i + "." + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_WEAPONS + " AS w" + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "w." + S.COLUMN_WEAPONS_ID + " = " + "i." + S.COLUMN_ITEMS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* WEAPON TREE QUERIES ******************************************/ /* * Get the parent weapon */ public WeaponTreeCursor queryWeaponTreeParent(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Selection = "i1." + S.COLUMN_ITEMS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new WeaponTreeCursor(wrapJoinHelper(builderWeaponTreeParent(), qh)); } /* * Get the child weapon */ public WeaponTreeCursor queryWeaponTreeChild(long id) { QueryHelper qh = new QueryHelper(); qh.Columns = null; qh.Selection = "i1." + S.COLUMN_ITEMS_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new WeaponTreeCursor(wrapJoinHelper(builderWeaponTreeChild(), qh)); } /* * Helper method to query for weapon tree parent */ private SQLiteQueryBuilder builderWeaponTreeParent() { // SELECT i2._id, i2.name // FROM items AS i1 // LEFT OUTER JOIN components AS c ON i1._id = c.created_item_id // JOIN weapons AS w2 ON w2._id = c.component_item_id // LEFT OUTER JOIN items AS i2 ON i2._id = w2._id // // WHERE i1._id = 'id'; String i1 = "i1"; String i2 = "i2"; String w2 = "w2"; String c = "c"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", i2 + "." + S.COLUMN_ITEMS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_ITEMS_NAME, i2 + "." + S.COLUMN_ITEMS_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_ITEMS + " AS i1" + " LEFT OUTER JOIN " + S.TABLE_COMPONENTS + " AS c" + " ON " + "i1." + S.COLUMN_ITEMS_ID + " = " + "c." + S.COLUMN_COMPONENTS_CREATED_ITEM_ID + " JOIN " + S.TABLE_WEAPONS + " AS w2" + " ON " + "w2." + S.COLUMN_WEAPONS_ID + " = " + "c." + S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i2" + " ON " + "i2." + S.COLUMN_ITEMS_ID + " = " + "w2." + S.COLUMN_WEAPONS_ID ); QB.setProjectionMap(projectionMap); return QB; } /* * Helper method to query for weapon tree child */ private SQLiteQueryBuilder builderWeaponTreeChild() { // SELECT i2._id, i2.name // FROM items AS i1 // LEFT OUTER JOIN components AS c ON i1._id = c.component_item_id // JOIN weapons AS w2 ON w2._id = c.created_item_id // LEFT OUTER JOIN items AS i2 ON i2._id = w2._id // // WHERE i1._id = '_id'; String i1 = "i1"; String i2 = "i2"; String w2 = "w2"; String c = "c"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", i2 + "." + S.COLUMN_ITEMS_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_ITEMS_NAME, i2 + "." + S.COLUMN_ITEMS_NAME); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_ITEMS + " AS i1" + " LEFT OUTER JOIN " + S.TABLE_COMPONENTS + " AS c" + " ON " + "i1." + S.COLUMN_ITEMS_ID + " = " + "c." + S.COLUMN_COMPONENTS_COMPONENT_ITEM_ID + " JOIN " + S.TABLE_WEAPONS + " AS w2" + " ON " + "w2." + S.COLUMN_WEAPONS_ID + " = " + "c." + S.COLUMN_COMPONENTS_CREATED_ITEM_ID + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i2" + " ON " + "i2." + S.COLUMN_ITEMS_ID + " = " + "w2." + S.COLUMN_WEAPONS_ID ); QB.setProjectionMap(projectionMap); return QB; } /********************************* WISHLIST QUERIES ******************************************/ /* * Get all wishlist */ public WishlistCursor queryWishlists() { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_WISHLIST; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new WishlistCursor(wrapHelper(qh)); } /* * Get all wishlist using a specific db instance */ public WishlistCursor queryWishlists(SQLiteDatabase db) { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_WISHLIST; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; return new WishlistCursor(wrapHelper(db, qh)); } /* * Get a specific wishlist */ public WishlistCursor queryWishlist(long id) { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_WISHLIST; qh.Columns = null; qh.Selection = S.COLUMN_WISHLIST_ID + " = ?"; qh.SelectionArgs = new String[]{ String.valueOf(id) }; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = "1"; return new WishlistCursor(wrapHelper(qh)); } /* * Add a wishlist */ public long queryAddWishlist(String name) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_NAME, name); return insertRecord(S.TABLE_WISHLIST, values); } /* * Add a wishlist with all info */ public long queryAddWishlistAll(SQLiteDatabase db, long id, String name) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_ID, id); values.put(S.COLUMN_WISHLIST_NAME, name); return insertRecord(db, S.TABLE_WISHLIST, values); } public int queryUpdateWishlist(long id, String name) { String strFilter = S.COLUMN_WISHLIST_ID + " = " + id; ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_NAME, name); return updateRecord(S.TABLE_WISHLIST, strFilter, values); } public boolean queryDeleteWishlist(long id) { String where = S.COLUMN_WISHLIST_ID + " = ?"; String[] args = new String[]{"" + id}; boolean w1 = deleteRecord(S.TABLE_WISHLIST, where, args); where = S.COLUMN_WISHLIST_DATA_WISHLIST_ID + " = ?"; boolean w2 = deleteRecord(S.TABLE_WISHLIST_DATA, where, args); return (w1 && w2); } /********************************* WISHLIST DATA QUERIES ******************************************/ /* * Get all wishlist data */ public WishlistDataCursor queryWishlistsData() { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_WISHLIST_DATA; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistData(); Cursor cursor = qb.query( getReadableDatabase(), qh.Columns, qh.Selection, qh.SelectionArgs, qh.GroupBy, qh.Having, qh.OrderBy, qh.Limit); return new WishlistDataCursor(cursor); } /* * Get all wishlist data using specific db instance */ public WishlistDataCursor queryWishlistsData(SQLiteDatabase db) { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_WISHLIST_DATA; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistData(); Cursor cursor = qb.query( db, qh.Columns, qh.Selection, qh.SelectionArgs, qh.GroupBy, qh.Having, qh.OrderBy, qh.Limit); return new WishlistDataCursor(cursor); } /* * Get all wishlist data for a specific wishlist */ public WishlistDataCursor queryWishlistData(long id) { String[] wdColumns = null; String wdSelection = "wd." + S.COLUMN_WISHLIST_DATA_WISHLIST_ID + " = ?"; String[] wdSelectionArgs = new String[]{ String.valueOf(id) }; String wdGroupBy = null; String wdHaving = null; String wdOrderBy = "wd." + S.COLUMN_WISHLIST_DATA_ITEM_ID + " ASC"; String wdLimit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistData(); Cursor cursor = qb.query( getReadableDatabase(), wdColumns, wdSelection, wdSelectionArgs, wdGroupBy, wdHaving, wdOrderBy, wdLimit); return new WishlistDataCursor(cursor); } /* * Get all wishlist data for a specific wishlist data id */ public WishlistDataCursor queryWishlistDataId(long id) { String[] wdColumns = null; String wdSelection = "wd." + S.COLUMN_WISHLIST_DATA_ID + " = ?"; String[] wdSelectionArgs = new String[]{ String.valueOf(id) }; String wdGroupBy = null; String wdHaving = null; String wdOrderBy = null; String wdLimit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistData(); Cursor cursor = qb.query( getReadableDatabase(), wdColumns, wdSelection, wdSelectionArgs, wdGroupBy, wdHaving, wdOrderBy, wdLimit); return new WishlistDataCursor(cursor); } /* * Get all data for a specific wishlist and item */ public WishlistDataCursor queryWishlistData(long wd_id, long item_id, String path) { String[] wdColumns = null; String wdSelection = "wd." + S.COLUMN_WISHLIST_DATA_WISHLIST_ID + " = ?" + " AND " + "wd." + S.COLUMN_WISHLIST_DATA_ITEM_ID + " = ?" + " AND " + "wd." + S.COLUMN_WISHLIST_DATA_PATH + " = ?"; String[] wdSelectionArgs = new String[]{ String.valueOf(wd_id), String.valueOf(item_id), path }; String wdGroupBy = null; String wdHaving = null; String wdOrderBy = null; String wdLimit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistData(); Cursor cursor = qb.query( getReadableDatabase(), wdColumns, wdSelection, wdSelectionArgs, wdGroupBy, wdHaving, wdOrderBy, wdLimit); return new WishlistDataCursor(cursor); } /* * Add a wishlist data to a specific wishlist */ public long queryAddWishlistData(long wishlist_id, long item_id, int quantity, String path) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_DATA_WISHLIST_ID, wishlist_id); values.put(S.COLUMN_WISHLIST_DATA_ITEM_ID, item_id); values.put(S.COLUMN_WISHLIST_DATA_QUANTITY, quantity); values.put(S.COLUMN_WISHLIST_DATA_PATH, path); return insertRecord(S.TABLE_WISHLIST_DATA, values); } /* * Add a wishlist data to a specific wishlist for copying */ public long queryAddWishlistDataAll(long wishlist_id, long item_id, int quantity, int satisfied, String path) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_DATA_WISHLIST_ID, wishlist_id); values.put(S.COLUMN_WISHLIST_DATA_ITEM_ID, item_id); values.put(S.COLUMN_WISHLIST_DATA_QUANTITY, quantity); values.put(S.COLUMN_WISHLIST_DATA_SATISFIED, satisfied); values.put(S.COLUMN_WISHLIST_DATA_PATH, path); return insertRecord(S.TABLE_WISHLIST_DATA, values); } /* * Add a wishlist data to a specific wishlist for copying */ public long queryAddWishlistDataAll(SQLiteDatabase db, long wishlist_id, long item_id, int quantity, int satisfied, String path) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_DATA_WISHLIST_ID, wishlist_id); values.put(S.COLUMN_WISHLIST_DATA_ITEM_ID, item_id); values.put(S.COLUMN_WISHLIST_DATA_QUANTITY, quantity); values.put(S.COLUMN_WISHLIST_DATA_SATISFIED, satisfied); values.put(S.COLUMN_WISHLIST_DATA_PATH, path); return insertRecord(db, S.TABLE_WISHLIST_DATA, values); } /* * Update a wishlist data to a specific wishlist */ public int queryUpdateWishlistDataQuantity(long id, int quantity) { String strFilter = S.COLUMN_WISHLIST_DATA_ID + " = " + id; ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_DATA_QUANTITY, quantity); return updateRecord(S.TABLE_WISHLIST_DATA, strFilter, values); } /* * Update a wishlist data to a specific wishlist */ public int queryUpdateWishlistDataSatisfied(long id, int satisfied) { String strFilter = S.COLUMN_WISHLIST_DATA_ID + " = " + id; ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_DATA_SATISFIED, satisfied); return updateRecord(S.TABLE_WISHLIST_DATA, strFilter, values); } public boolean queryDeleteWishlistData(long id) { String where = S.COLUMN_WISHLIST_DATA_ID + " = ?"; String[] args = new String[]{ "" + id }; return deleteRecord(S.TABLE_WISHLIST_DATA, where, args); } /* * Helper method to query for wishlistData */ private SQLiteQueryBuilder builderWishlistData() { // SELECT wd._id AS _id, wd.wishlist_id, wd.item_id, wd.quantity, wd.satisfied, wd.path // i.name, i.jpn_name, i.type, i.rarity, i.carry_capacity, i.buy, i.sell, i.description, // i.icon_name, i.armor_dupe_name_fix // FROM wishlist_data AS wd // LEFT OUTER JOIN wishlist AS w ON wd.wishlist_id = w._id // LEFT OUTER JOIN items AS i ON wd.item_id = i._id; String wd = "wd"; String w = "w"; String i = "i"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", wd + "." + S.COLUMN_WISHLIST_DATA_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_WISHLIST_DATA_WISHLIST_ID, wd + "." + S.COLUMN_WISHLIST_DATA_WISHLIST_ID); projectionMap.put(S.COLUMN_WISHLIST_DATA_ITEM_ID, wd + "." + S.COLUMN_WISHLIST_DATA_ITEM_ID); projectionMap.put(S.COLUMN_WISHLIST_DATA_QUANTITY, wd + "." + S.COLUMN_WISHLIST_DATA_QUANTITY); projectionMap.put(S.COLUMN_WISHLIST_DATA_SATISFIED, wd + "." + S.COLUMN_WISHLIST_DATA_SATISFIED); projectionMap.put(S.COLUMN_WISHLIST_DATA_PATH, wd + "." + S.COLUMN_WISHLIST_DATA_PATH); projectionMap.put(S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_JPN_NAME, i + "." + S.COLUMN_ITEMS_JPN_NAME); projectionMap.put(S.COLUMN_ITEMS_TYPE, i + "." + S.COLUMN_ITEMS_TYPE); projectionMap.put(S.COLUMN_ITEMS_RARITY, i + "." + S.COLUMN_ITEMS_RARITY); projectionMap.put(S.COLUMN_ITEMS_CARRY_CAPACITY, i + "." + S.COLUMN_ITEMS_CARRY_CAPACITY); projectionMap.put(S.COLUMN_ITEMS_BUY, i + "." + S.COLUMN_ITEMS_BUY); projectionMap.put(S.COLUMN_ITEMS_SELL, i + "." + S.COLUMN_ITEMS_SELL); projectionMap.put(S.COLUMN_ITEMS_DESCRIPTION, i + "." + S.COLUMN_ITEMS_DESCRIPTION); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX, i + "." + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_WISHLIST_DATA + " AS wd" + " LEFT OUTER JOIN " + S.TABLE_WISHLIST + " AS w" + " ON " + "wd." + S.COLUMN_WISHLIST_DATA_WISHLIST_ID + " = " + "w." + S.COLUMN_WISHLIST_ID + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "wd." + S.COLUMN_WISHLIST_DATA_ITEM_ID + " = " + "i." + S.COLUMN_ITEMS_ID); QB.setProjectionMap(projectionMap); return QB; } /********************************* WISHLIST COMPONENT QUERIES ******************************************/ /* * Get all wishlist components */ public WishlistComponentCursor queryWishlistsComponent() { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_WISHLIST_COMPONENT; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistComponent(); Cursor cursor = qb.query( getReadableDatabase(), qh.Columns, qh.Selection, qh.SelectionArgs, qh.GroupBy, qh.Having, qh.OrderBy, qh.Limit); return new WishlistComponentCursor(cursor); } /** * Get all wishlist components using a specific db instance * @param db * @return */ public WishlistComponentCursor queryWishlistsComponent(SQLiteDatabase db) { QueryHelper qh = new QueryHelper(); qh.Distinct = false; qh.Table = S.TABLE_WISHLIST_COMPONENT; qh.Columns = null; qh.Selection = null; qh.SelectionArgs = null; qh.GroupBy = null; qh.Having = null; qh.OrderBy = null; qh.Limit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistComponent(); Cursor cursor = qb.query( db, qh.Columns, qh.Selection, qh.SelectionArgs, qh.GroupBy, qh.Having, qh.OrderBy, qh.Limit); return new WishlistComponentCursor(cursor); } /* * Get all wishlist components for a specific wishlist */ public WishlistComponentCursor queryWishlistComponents(long id) { String[] wcColumns = null; String wcSelection = "wc." + S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID + " = ?"; String[] wcSelectionArgs = new String[]{ String.valueOf(id) }; String wcGroupBy = null; String wcHaving = null; String wcOrderBy = "wc." + S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID + " ASC"; String wcLimit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistComponent(); Cursor cursor = qb.query( getReadableDatabase(), wcColumns, wcSelection, wcSelectionArgs, wcGroupBy, wcHaving, wcOrderBy, wcLimit); return new WishlistComponentCursor(cursor); } /* * Get all data for a specific wishlist and item */ public WishlistComponentCursor queryWishlistComponent(long wc_id, long item_id) { String[] wcColumns = null; String wcSelection = "wc." + S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID + " = ?" + " AND " + "wc." + S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID + " = ?"; String[] wcSelectionArgs = new String[]{ String.valueOf(wc_id), String.valueOf(item_id) }; String wcGroupBy = null; String wcHaving = null; String wcOrderBy = null; String wcLimit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistComponent(); Cursor cursor = qb.query( getReadableDatabase(), wcColumns, wcSelection, wcSelectionArgs, wcGroupBy, wcHaving, wcOrderBy, wcLimit); return new WishlistComponentCursor(cursor); } /* * Get all wishlist components for a specific id */ public WishlistComponentCursor queryWishlistComponentId(long id) { String[] wcColumns = null; String wcSelection = "wc." + S.COLUMN_WISHLIST_COMPONENT_ID + " = ?"; String[] wcSelectionArgs = new String[]{ String.valueOf(id) }; String wcGroupBy = null; String wcHaving = null; String wcOrderBy = null; String wcLimit = null; // Multithread issues workaround SQLiteQueryBuilder qb = builderWishlistComponent(); Cursor cursor = qb.query( getReadableDatabase(), wcColumns, wcSelection, wcSelectionArgs, wcGroupBy, wcHaving, wcOrderBy, wcLimit); return new WishlistComponentCursor(cursor); } /* * Add a wishlist component to a specific wishlist */ public long queryAddWishlistComponent(long wishlist_id, long component_id, int quantity) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID, wishlist_id); values.put(S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID, component_id); values.put(S.COLUMN_WISHLIST_COMPONENT_QUANTITY, quantity); return insertRecord(S.TABLE_WISHLIST_COMPONENT, values); } /* * Add a wishlist component to a specific wishlist */ public long queryAddWishlistComponentAll(long wishlist_id, long component_id, int quantity, int notes) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID, wishlist_id); values.put(S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID, component_id); values.put(S.COLUMN_WISHLIST_COMPONENT_QUANTITY, quantity); values.put(S.COLUMN_WISHLIST_COMPONENT_NOTES, notes); return insertRecord(S.TABLE_WISHLIST_COMPONENT, values); } /* * Add a wishlist component to a specific wishlist */ public long queryAddWishlistComponentAll(SQLiteDatabase db, long wishlist_id, long component_id, int quantity, int notes) { ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID, wishlist_id); values.put(S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID, component_id); values.put(S.COLUMN_WISHLIST_COMPONENT_QUANTITY, quantity); values.put(S.COLUMN_WISHLIST_COMPONENT_NOTES, notes); return insertRecord(db, S.TABLE_WISHLIST_COMPONENT, values); } /* * Update a wishlist component to a specific wishlist */ public int queryUpdateWishlistComponentQuantity(long id, int quantity) { String strFilter = S.COLUMN_WISHLIST_COMPONENT_ID + " = " + id; ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_COMPONENT_QUANTITY, quantity); return updateRecord(S.TABLE_WISHLIST_COMPONENT, strFilter, values); } public boolean queryDeleteWishlistComponent(long id) { String where = S.COLUMN_WISHLIST_COMPONENT_ID + " = ?"; String[] args = new String[]{ "" + id }; return deleteRecord(S.TABLE_WISHLIST_COMPONENT, where, args); } /* * Update a wishlist component to a specific wishlist */ public int queryUpdateWishlistComponentNotes(long id, int notes) { String strFilter = S.COLUMN_WISHLIST_COMPONENT_ID + " = " + id; ContentValues values = new ContentValues(); values.put(S.COLUMN_WISHLIST_COMPONENT_NOTES, notes); return updateRecord(S.TABLE_WISHLIST_COMPONENT, strFilter, values); } /* * Helper method to query components for wishlistData */ private SQLiteQueryBuilder builderWishlistComponent() { // SELECT wc._id AS _id, wc.wishlist_id, wc.component_id, wc.quantity, wc.notes // i.name, i.jpn_name, i.type, i.rarity, i.carry_capacity, i.buy, i.sell, i.description, // i.icon_name, i.armor_dupe_name_fix // FROM wishlist_component AS wc // LEFT OUTER JOIN wishlist AS w ON wd.wishlist_id = w._ic // LEFT OUTER JOIN items AS i ON wc.component_id = i._id; String wc = "wc"; String w = "w"; String i = "i"; HashMap<String, String> projectionMap = new HashMap<String, String>(); projectionMap.put("_id", wc + "." + S.COLUMN_WISHLIST_COMPONENT_ID + " AS " + "_id"); projectionMap.put(S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID, wc + "." + S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID); projectionMap.put(S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID, wc + "." + S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID); projectionMap.put(S.COLUMN_WISHLIST_COMPONENT_QUANTITY, wc + "." + S.COLUMN_WISHLIST_COMPONENT_QUANTITY); projectionMap.put(S.COLUMN_WISHLIST_COMPONENT_NOTES, wc + "." + S.COLUMN_WISHLIST_COMPONENT_NOTES); projectionMap.put(S.COLUMN_ITEMS_NAME, i + "." + S.COLUMN_ITEMS_NAME); projectionMap.put(S.COLUMN_ITEMS_JPN_NAME, i + "." + S.COLUMN_ITEMS_JPN_NAME); projectionMap.put(S.COLUMN_ITEMS_TYPE, i + "." + S.COLUMN_ITEMS_TYPE); projectionMap.put(S.COLUMN_ITEMS_RARITY, i + "." + S.COLUMN_ITEMS_RARITY); projectionMap.put(S.COLUMN_ITEMS_CARRY_CAPACITY, i + "." + S.COLUMN_ITEMS_CARRY_CAPACITY); projectionMap.put(S.COLUMN_ITEMS_BUY, i + "." + S.COLUMN_ITEMS_BUY); projectionMap.put(S.COLUMN_ITEMS_SELL, i + "." + S.COLUMN_ITEMS_SELL); projectionMap.put(S.COLUMN_ITEMS_DESCRIPTION, i + "." + S.COLUMN_ITEMS_DESCRIPTION); projectionMap.put(S.COLUMN_ITEMS_ICON_NAME, i + "." + S.COLUMN_ITEMS_ICON_NAME); projectionMap.put(S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX, i + "." + S.COLUMN_ITEMS_ARMOR_DUPE_NAME_FIX); //Create new querybuilder SQLiteQueryBuilder QB = new SQLiteQueryBuilder(); QB.setTables(S.TABLE_WISHLIST_COMPONENT + " AS wc" + " LEFT OUTER JOIN " + S.TABLE_WISHLIST + " AS w" + " ON " + "wc." + S.COLUMN_WISHLIST_COMPONENT_WISHLIST_ID + " = " + "w." + S.COLUMN_WISHLIST_ID + " LEFT OUTER JOIN " + S.TABLE_ITEMS + " AS i" + " ON " + "wc." + S.COLUMN_WISHLIST_COMPONENT_COMPONENT_ID + " = " + "i." + S.COLUMN_ITEMS_ID); QB.setProjectionMap(projectionMap); return QB; } }