All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.j256.ormlite.db.SqliteAndroidDatabaseType Maven / Gradle / Ivy

package com.j256.ormlite.db;

import java.sql.SQLException;

import com.j256.ormlite.android.DatabaseTableConfigUtil;
import com.j256.ormlite.field.DataPersister;
import com.j256.ormlite.field.FieldType;
import com.j256.ormlite.field.types.DateStringType;
import com.j256.ormlite.field.types.SqlDateStringType;
import com.j256.ormlite.field.types.SqlDateType;
import com.j256.ormlite.field.types.TimeStampStringType;
import com.j256.ormlite.field.types.TimeStampType;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.DatabaseTableConfig;

/**
 * Sqlite database type information for the Android OS that makes native calls to the Android OS database APIs.
 * 
 * NOTE: This database-type maps any persisted dates into specific string formats. If you are using a custom date
 * persister, you need to store the value as a string and not as a SQL date type.
 * 
 * @author graywatson
 */
public class SqliteAndroidDatabaseType extends BaseSqliteDatabaseType {

	@Override
	public void loadDriver() {
		// noop
	}

	@Override
	public boolean isDatabaseUrlThisType(String url, String dbTypePart) {
		// not used by the android code
		return true;
	}

	@Override
	protected String getDriverClassName() {
		// no driver to load in android-land
		return null;
	}

	@Override
	public String getDatabaseName() {
		return "Android SQLite";
	}

	@Override
	protected void appendDateType(StringBuilder sb, FieldType fieldType, int fieldWidth) {
		// default is to store the date as a string
		appendStringType(sb, fieldType, fieldWidth);
	}

	@Override
	public void appendEscapedEntityName(StringBuilder sb, String name) {
		/*
		 * Android Sqlite doesn't seem to be able to handle the 'foo'.'bar' form of the column name which is for
		 * database.table I think so we just default to be single quoted like before.
		 */
		sb.append('`').append(name).append('`');
	}

	@Override
	protected void appendBooleanType(StringBuilder sb, FieldType fieldType, int fieldWidth) {
		// we have to convert booleans to numbers
		appendShortType(sb, fieldType, fieldWidth);
	}

	@Override
	public DataPersister getDataPersister(DataPersister defaultPersister, FieldType fieldType) {
		if (defaultPersister == null) {
			return super.getDataPersister(defaultPersister, fieldType);
		}
		// we are only overriding certain types
		switch (defaultPersister.getSqlType()) {
			case DATE:
				/*
				 * We need to map the dates into their string equivalents because of mapping issues with Sqlite's
				 * default date string formats.
				 */
				if (defaultPersister instanceof TimeStampType) {
					return TimeStampStringType.getSingleton();
				} else if (defaultPersister instanceof SqlDateType) {
					return SqlDateStringType.getSingleton();
				} else {
					return DateStringType.getSingleton();
				}
			default:
				return super.getDataPersister(defaultPersister, fieldType);
		}
	}

	@Override
	public boolean isNestedSavePointsSupported() {
		return false;
	}

	@Override
	public boolean isBatchUseTransaction() {
		return true;
	}

	@Override
	public  DatabaseTableConfig extractDatabaseTableConfig(ConnectionSource connectionSource, Class clazz)
			throws SQLException {
		return DatabaseTableConfigUtil.fromClass(connectionSource, clazz);
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy