// Path: library/src/main/java/uk/co/alt236/easycursor/sqlcursor/querybuilders/interfaces/QueryModelInfo.java
// public interface QueryModelInfo {
//     /**
//      * Gets the user specified comment of this Model
//      *
//      * @return the comment
//      */
//     String getModelComment();
// 
//     /**
//      * Gets the user specified tag of this Model
//      *
//      * @return the tag
//      */
//     String getModelTag();
// 
//     /**
//      * Gets the user specified version of this Model
//      * The default value is 0
//      *
//      * @return the version of this model
//      */
//     int getModelVersion();
// }
// 
// Path: library/src/main/java/uk/co/alt236/easycursor/sqlcursor/querybuilders/interfaces/SqlSelectBuilder.java
// public interface SqlSelectBuilder {
// 
//     EasyQueryModel build();
// 
//     String getGroupBy();
// 
//     String getHaving();
// 
//     String getLimit();
// 
//     String[] getProjectionIn();
// 
//     String getSelection();
// 
//     String[] getSelectionArgs();
// 
//     String getSortOrder();
// 
//     String getTables();
// 
//     boolean isDistinct();
// 
//     boolean isStrict();
// }
// 
// Path: library/src/main/java/uk/co/alt236/easycursor/util/JsonPayloadHelper.java
// public final class JsonPayloadHelper {
//     private static final String NULL = "null";
// 
//     private JsonPayloadHelper() {
//     }
// 
//     public static void add(final JSONObject object, final String key, final Boolean value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Double value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Integer value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Long value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Object value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final String value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final String[] value) throws JSONException {
//         final JSONArray arr = new JSONArray();
// 
//         if (value != null && value.length > 0) {
//             for (final String str : value) {
//                 arr.put(str);
//             }
//         }
// 
//         object.put(key, arr);
//     }
// 
// 
//     public static boolean getBoolean(final JSONObject object, final String key) {
//         return object.optBoolean(key, false);
//     }
// 
//     public static int getInt(final JSONObject object, final String key) {
//         return object.optInt(key, 0);
//     }
// 
//     public static String getString(final JSONObject object, final String key) {
//         final String res = object.optString(key, null);
//         if (key != null && key.equalsIgnoreCase(NULL)) {
//             return null;
//         } else {
//             return res;
//         }
//     }
// 
//     public static String[] getStringArray(final JSONObject payload, final String key) {
//         final JSONArray arr = payload.optJSONArray(key);
//         final String[] res;
// 
//         if (arr != null && arr.length() > 0) {
//             final int count = arr.length();
//             res = new String[count];
// 
//             for (int i = 0; i < count; i++) {
//                 res[i] = arr.optString(i);
//             }
//         } else {
//             res = null;
//         }
// 
//         return res;
//     }
// }


import uk.co.alt236.easycursor.sqlcursor.querybuilders.interfaces.SqlSelectBuilder;
import uk.co.alt236.easycursor.util.JsonPayloadHelper;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.os.Build;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
import uk.co.alt236.easycursor.sqlcursor.querybuilders.interfaces.QueryModelInfo;
     * @return the Tables clause
     */
    public String getTables() {
        return mTables;
    }

    /**
     * Returns whether or not this query is set to be Distinct.
     *
     * @return the Distinct setting
     */
    public boolean isDistinct() {
        return mDistinct;
    }

    /**
     * Returns whether or not this query is set to be Strict.
     * This value is ignored if you are on a device running API lower than 14.
     *
     * @return the Strict setting
     */
    public boolean isStrict() {
        return mStrict;
    }

    @Override
    public String toJson() throws JSONException {
        final JSONObject payload = new JSONObject();

        addCommonFields(payload);
// Path: library/src/main/java/uk/co/alt236/easycursor/sqlcursor/querybuilders/interfaces/QueryModelInfo.java
// public interface QueryModelInfo {
//     /**
//      * Gets the user specified comment of this Model
//      *
//      * @return the comment
//      */
//     String getModelComment();
// 
//     /**
//      * Gets the user specified tag of this Model
//      *
//      * @return the tag
//      */
//     String getModelTag();
// 
//     /**
//      * Gets the user specified version of this Model
//      * The default value is 0
//      *
//      * @return the version of this model
//      */
//     int getModelVersion();
// }
// 
// Path: library/src/main/java/uk/co/alt236/easycursor/sqlcursor/querybuilders/interfaces/SqlSelectBuilder.java
// public interface SqlSelectBuilder {
// 
//     EasyQueryModel build();
// 
//     String getGroupBy();
// 
//     String getHaving();
// 
//     String getLimit();
// 
//     String[] getProjectionIn();
// 
//     String getSelection();
// 
//     String[] getSelectionArgs();
// 
//     String getSortOrder();
// 
//     String getTables();
// 
//     boolean isDistinct();
// 
//     boolean isStrict();
// }
// 
// Path: library/src/main/java/uk/co/alt236/easycursor/util/JsonPayloadHelper.java
// public final class JsonPayloadHelper {
//     private static final String NULL = "null";
// 
//     private JsonPayloadHelper() {
//     }
// 
//     public static void add(final JSONObject object, final String key, final Boolean value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Double value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Integer value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Long value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final Object value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final String value) throws JSONException {
//         object.put(key, value);
//     }
// 
//     public static void add(final JSONObject object, final String key, final String[] value) throws JSONException {
//         final JSONArray arr = new JSONArray();
// 
//         if (value != null && value.length > 0) {
//             for (final String str : value) {
//                 arr.put(str);
//             }
//         }
// 
//         object.put(key, arr);
//     }
// 
// 
//     public static boolean getBoolean(final JSONObject object, final String key) {
//         return object.optBoolean(key, false);
//     }
// 
//     public static int getInt(final JSONObject object, final String key) {
//         return object.optInt(key, 0);
//     }
// 
//     public static String getString(final JSONObject object, final String key) {
//         final String res = object.optString(key, null);
//         if (key != null && key.equalsIgnoreCase(NULL)) {
//             return null;
//         } else {
//             return res;
//         }
//     }
// 
//     public static String[] getStringArray(final JSONObject payload, final String key) {
//         final JSONArray arr = payload.optJSONArray(key);
//         final String[] res;
// 
//         if (arr != null && arr.length() > 0) {
//             final int count = arr.length();
//             res = new String[count];
// 
//             for (int i = 0; i < count; i++) {
//                 res[i] = arr.optString(i);
//             }
//         } else {
//             res = null;
//         }
// 
//         return res;
//     }
// }


// Path: library/src/main/java/uk/co/alt236/easycursor/sqlcursor/querymodels/SelectQueryModel.java
import uk.co.alt236.easycursor.sqlcursor.querybuilders.interfaces.SqlSelectBuilder;
import uk.co.alt236.easycursor.util.JsonPayloadHelper;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteQueryBuilder;
import android.os.Build;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.Arrays;
import uk.co.alt236.easycursor.sqlcursor.querybuilders.interfaces.QueryModelInfo;

     * @return the Tables clause
     */
    public String getTables() {
        return mTables;
    }

    /**
     * Returns whether or not this query is set to be Distinct.
     *
     * @return the Distinct setting
     */
    public boolean isDistinct() {
        return mDistinct;
    }

    /**
     * Returns whether or not this query is set to be Strict.
     * This value is ignored if you are on a device running API lower than 14.
     *
     * @return the Strict setting
     */
    public boolean isStrict() {
        return mStrict;
    }

    @Override
    public String toJson() throws JSONException {
        final JSONObject payload = new JSONObject();

        addCommonFields(payload);
        JsonPayloadHelper.add(payload, FIELD_DISTINCT, mDistinct);