Java源码示例:com.j256.ormlite.field.FieldType

示例1
@Test
public void testGeneratedIdSequence() throws Exception {
	DatabaseType databaseType = new NeedsSequenceDatabaseType();
	connectionSource.setDatabaseType(databaseType);
	TableInfo<GeneratedId, Integer> tableInfo =
			new TableInfo<GeneratedId, Integer>(databaseType, GeneratedId.class);
	Dao<GeneratedId, Integer> dao = createDao(GeneratedId.class, false);
	StatementExecutor<GeneratedId, Integer> se =
			new StatementExecutor<GeneratedId, Integer>(databaseType, tableInfo, dao);
	DatabaseConnection databaseConnection = createMock(DatabaseConnection.class);
	expect(databaseConnection.queryForLong(isA(String.class))).andReturn(1L);
	expect(databaseConnection.insert(isA(String.class), isA(Object[].class), isA(FieldType[].class),
			(GeneratedKeyHolder) isNull())).andReturn(1);

	replay(databaseConnection);
	GeneratedId genIdSeq = new GeneratedId();
	se.create(databaseConnection, genIdSeq, null);
	verify(databaseConnection);
}
 
示例2
@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);
	}
}
 
示例3
private static void appendWhereIds(DatabaseType databaseType, FieldType idField, StringBuilder sb, int numDatas,
		FieldType[] fieldTypes) {
	sb.append("WHERE ");
	databaseType.appendEscapedEntityName(sb, idField.getColumnName());
	sb.append(" IN (");
	boolean first = true;
	for (int i = 0; i < numDatas; i++) {
		if (first) {
			first = false;
		} else {
			sb.append(',');
		}
		sb.append('?');
		if (fieldTypes != null) {
			fieldTypes[i] = idField;
		}
	}
	sb.append(") ");
}
 
示例4
@Test(expected = IllegalStateException.class)
public void testBadGeneratedId() throws Exception {
	Field field = GeneratedId.class.getField("id");
	DatabaseType databaseType = createMock(DatabaseType.class);
	expect(databaseType.isIdSequenceNeeded()).andReturn(false);
	DataPersister dataPersister = createMock(DataPersister.class);
	expect(databaseType.getDataPersister(isA(DataPersister.class), isA(FieldType.class))).andReturn(dataPersister);
	expect(databaseType.getFieldConverter(isA(DataPersister.class), isA(FieldType.class))).andReturn(dataPersister);
	expect(databaseType.isEntityNamesMustBeUpCase()).andReturn(true);
	expect(databaseType.upCaseEntityName("id")).andReturn("ID");
	replay(databaseType);
	connectionSource.setDatabaseType(databaseType);
	try {
		FieldType fieldType = FieldType.createFieldType(databaseType, "foo", field, GeneratedId.class);
		verify(databaseType);
		StringBuilder sb = new StringBuilder();
		List<String> statementsBefore = new ArrayList<String>();
		databaseType.appendColumnArg(null, sb, fieldType, null, statementsBefore, null, null);
	} finally {
		connectionSource.setDatabaseType(databaseType);
	}
}
 
示例5
@Override
@Before
public void before() throws Exception {
	super.before();

	Field field = Foo.class.getDeclaredField("stringField");
	assertEquals(String.class, field.getType());
	stringFieldType = FieldType.createFieldType(databaseType, "BaseFoo", field, Foo.class);
	stringFieldType.configDaoInformation(connectionSource, Foo.class);
	field = Foo.class.getDeclaredField("val");
	assertEquals(int.class, field.getType());
	numberFieldType = FieldType.createFieldType(databaseType, "BaseFoo", field, Foo.class);
	numberFieldType.configDaoInformation(connectionSource, Foo.class);
	field = Foreign.class.getDeclaredField("foo");
	assertEquals(Foo.class, field.getType());
	foreignFieldType = FieldType.createFieldType(databaseType, "BaseFoo", field, Foreign.class);
	foreignFieldType.configDaoInformation(connectionSource, Foreign.class);

	baseFooTableInfo = new TableInfo<Foo, Integer>(databaseType, Foo.class);
	baseSchemaFooTableInfo = new TableInfo<SchemaFoo, Integer>(databaseType, SchemaFoo.class);
}
 
示例6
private <FT> ForeignCollection<FT> makeEmptyForeignCollection(T parent, String fieldName) throws SQLException {
	checkForInitialized();
	ID id;
	if (parent == null) {
		id = null;
	} else {
		id = extractId(parent);
	}
	for (FieldType fieldType : tableInfo.getFieldTypes()) {
		if (fieldType.getColumnName().equals(fieldName)) {
			@SuppressWarnings("unchecked")
			ForeignCollection<FT> collection = (ForeignCollection<FT>) fieldType.buildForeignCollection(parent, id);
			if (parent != null) {
				fieldType.assignField(connectionSource, parent, collection, true, null);
			}
			return collection;
		}
	}
	throw new IllegalArgumentException("Could not find a field named " + fieldName);
}
 
示例7
@Test
public void testGeneratedIdSequenceAutoName() throws Exception {
	if (connectionSource == null) {
		return;
	}
	TableInfo<GeneratedIdSequenceAutoName, Integer> tableInfo =
			new TableInfo<GeneratedIdSequenceAutoName, Integer>(databaseType, GeneratedIdSequenceAutoName.class);
	assertEquals(2, tableInfo.getFieldTypes().length);
	FieldType idField = tableInfo.getFieldTypes()[0];
	StringBuilder sb = new StringBuilder();
	List<String> additionalArgs = new ArrayList<String>();
	List<String> statementsBefore = new ArrayList<String>();
	List<String> queriesAfter = new ArrayList<String>();
	databaseType.appendColumnArg(null, sb, idField, additionalArgs, statementsBefore, null, queriesAfter);
	databaseType.addPrimaryKeySql(new FieldType[] { idField }, additionalArgs, statementsBefore, null,
			queriesAfter);
	String seqName = databaseType
			.generateIdSequenceName(GeneratedIdSequenceAutoName.class.getSimpleName().toLowerCase(), idField);
	assertTrue(sb.toString().contains(" DEFAULT NEXTVAL('\"" + seqName + "\"')"));
	assertEquals(1, statementsBefore.size());
	assertTrue(statementsBefore.get(0).contains(seqName));
	assertEquals(1, additionalArgs.size());
	assertTrue(additionalArgs.get(0).contains("PRIMARY KEY"));
	assertEquals(0, queriesAfter.size());
}
 
示例8
@Override
public FieldConverter getFieldConverter(DataPersister dataPersister, FieldType fieldType) {
	switch (dataPersister.getSqlType()) {
		case BOOLEAN:
			/*
			 * Booleans in Oracle are stored as the character '1' or '0'. You can change the characters by
			 * specifying a format string. It must be a string with 2 characters. The first character is the value
			 * for TRUE, the second is FALSE. See {@link BooleanCharType}.
			 * 
			 * You can also specify the format as "integer" to use an integer column type and the value 1 (really
			 * non-0) for true and 0 for false. See {@link BooleanIntegerType}.
			 */
			if (BOOLEAN_INTEGER_FORMAT.equalsIgnoreCase(fieldType.getFormat())) {
				return DataType.BOOLEAN_INTEGER.getDataPersister();
			} else {
				return DataType.BOOLEAN_CHAR.getDataPersister();
			}
		default:
			return super.getFieldConverter(dataPersister, fieldType);
	}
}
 
示例9
/**
 * {@inheritDoc}
 */
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr) {
	Object defaultValue = null;
	if (DateConverter.DATETIME_FORMAT.equals(defaultStr)) {
		defaultValue = javaToSqlArg(null, new Date());
	}
	return defaultValue;
}
 
示例10
@Override
public long queryForLong(String statement, Object[] args, FieldType[] argFieldTypes) throws SQLException {
	// don't care about the object cache here
	Object result = queryForOne(statement, args, argFieldTypes, longWrapper, null);
	if (result == null) {
		throw new SQLException("No results returned in query-for-long: " + statement);
	} else if (result == MORE_THAN_ONE) {
		throw new SQLException("More than 1 result returned in query-for-long: " + statement);
	} else {
		return (Long) result;
	}
}
 
示例11
/**
 * {@inheritDoc}
 */
@Override
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos)
		throws SQLException {
	Object javaDate = null;
	if (sqlArg != null && sqlArg instanceof String) {
		try {
			javaDate = dateConverter.dateValue((String) sqlArg);
		} catch (Exception e) {
			throw new SQLException(
					"Failed to parse date string: " + sqlArg, e);
		}
	}
	return javaDate;
}
 
示例12
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr) throws SQLException {
	try {
		return new BigDecimal(defaultStr);
	} catch (IllegalArgumentException e) {
		throw SqlExceptionUtil.create("Problems with field " + fieldType + " parsing default BigDecimal string '"
				+ defaultStr + "'", e);
	}
}
 
示例13
@Override
protected void appendLongType(StringBuilder sb, FieldType fieldType, int fieldWidth) {
	/*
	 * This is unfortunate. SQLIte requires that a generated-id have the string "INTEGER PRIMARY KEY AUTOINCREMENT"
	 * even though the maximum generated value is 64-bit. See configureGeneratedId below.
	 */
	if (fieldType.getSqlType() == SqlType.LONG && fieldType.isGeneratedId()) {
		sb.append("INTEGER");
	} else {
		sb.append("BIGINT");
	}
}
 
示例14
@Override
protected void configureGeneratedId(String tableName, StringBuilder sb, FieldType fieldType,
		List<String> statementsBefore, List<String> statementsAfter, List<String> additionalArgs,
		List<String> queriesAfter) {
	sb.append("AUTO_INCREMENT ");
	configureId(sb, fieldType, statementsBefore, additionalArgs, queriesAfter);
}
 
示例15
@Override
public void dropColumnArg(FieldType fieldType, List<String> statementsBefore, List<String> statementsAfter) {
	if (fieldType.isGeneratedIdSequence()) {
		StringBuilder sb = new StringBuilder(64);
		sb.append("DROP SEQUENCE ");
		appendEscapedEntityName(sb, fieldType.getGeneratedIdSequence());
		statementsAfter.add(sb.toString());
	}
}
 
示例16
@Override
public FieldConverter getFieldConverter(DataPersister dataType, FieldType fieldType) {
	// we are only overriding certain types
	switch (dataType.getSqlType()) {
		case BOOLEAN:
			return booleanConverter;
		case BYTE:
			return byteConverter;
		default:
			return super.getFieldConverter(dataType, fieldType);
	}
}
 
示例17
/**
 * Output the SQL type for a Java String.
 */
protected void appendStringType(StringBuilder sb, FieldType fieldType, int fieldWidth) {
	if (isVarcharFieldWidthSupported()) {
		sb.append("VARCHAR(").append(fieldWidth).append(')');
	} else {
		sb.append("VARCHAR");
	}
}
 
示例18
@Override
public int insert(String statement, Object[] args, FieldType[] argfieldTypes, GeneratedKeyHolder keyHolder)
		throws SQLException {
	// change the first argument which should be the 'val' field
	args[0] = (Integer) args[0] + VALUE_INCREMENT;
	insertCount++;
	return super.insert(statement, args, argfieldTypes, keyHolder);
}
 
示例19
@Test
public void testStuff() {
	NullArgHolder holder = new NullArgHolder();
	assertEquals("null-holder", holder.getColumnName());
	holder.setMetaInfo((String) null);
	holder.setMetaInfo((FieldType) null);
}
 
示例20
@Test
public void testByte() throws Exception {
	TableInfo<AllTypes, Void> tableInfo = new TableInfo<AllTypes, Void>(databaseType, AllTypes.class);
	assertEquals(9, tableInfo.getFieldTypes().length);
	FieldType byteField = tableInfo.getFieldTypes()[3];
	assertEquals("byteField", byteField.getColumnName());
	StringBuilder sb = new StringBuilder();
	List<String> additionalArgs = new ArrayList<String>();
	List<String> statementsBefore = new ArrayList<String>();
	databaseType.appendColumnArg(null, sb, byteField, additionalArgs, statementsBefore, null, null);
	assertTrue(sb.toString().contains("SMALLINT"));
}
 
示例21
@Test
public void testFieldConfigConstructor() throws SQLException {
	List<DatabaseFieldConfig> fieldConfigs = new ArrayList<DatabaseFieldConfig>();
	fieldConfigs.add(new DatabaseFieldConfig("stuff", null, DataType.UNKNOWN, "", 0, true, false, false, null,
			false, null, false, null, false, null, false, null, null, false,
			DatabaseFieldConfig.NO_MAX_FOREIGN_AUTO_REFRESH_LEVEL_SPECIFIED, 0));
	DatabaseTableConfig<DatabaseTableAnno> dbTableConf =
			new DatabaseTableConfig<DatabaseTableAnno>(databaseType, DatabaseTableAnno.class, fieldConfigs);
	assertEquals(DatabaseTableAnno.class, dbTableConf.getDataClass());
	assertEquals(TABLE_NAME, dbTableConf.getTableName());
	dbTableConf.extractFieldTypes(databaseType);
	FieldType[] fieldTypes = dbTableConf.getFieldTypes(databaseType);
	assertEquals(1, fieldTypes.length);
	assertEquals("stuff", fieldTypes[0].getColumnName());
}
 
示例22
@Override
public Object parseDefaultString(FieldType fieldType, String defaultStr) throws SQLException {
	this.defaultStr = defaultStr;
	if ("CURRENT_TIMESTAMP()".equals(defaultStr)) {
		return defaultStr;
	} else {
		return super.parseDefaultString(fieldType, defaultStr);
	}
}
 
示例23
@Test(expected = SQLException.class)
public void testArgumentHolderNotSet() throws Exception {
	TableInfo<Foo, Integer> tableInfo = new TableInfo<Foo, Integer>(databaseType, Foo.class);
	Dao<Foo, Integer> dao = createDao(Foo.class, false);
	MappedCreate<Foo, Integer> mappedCreate = MappedCreate.build(dao, tableInfo);
	DatabaseConnection conn = createMock(DatabaseConnection.class);
	expect(conn.insert(isA(String.class), isA(Object[].class), isA(FieldType[].class),
			isA(GeneratedKeyHolder.class))).andReturn(1);
	replay(conn);
	mappedCreate.insert(databaseType, conn, new Foo(), null);
}
 
示例24
@Override
public void dropColumnArg(FieldType fieldType, List<String> statementsBefore, List<String> statementsAfter) {
	if (fieldType.isGeneratedIdSequence()) {
		StringBuilder sb = new StringBuilder(64);
		sb.append("DROP SEQUENCE ");
		appendEscapedEntityName(sb, fieldType.getGeneratedIdSequence());
		statementsAfter.add(sb.toString());
	}
}
 
示例25
public static <T, ID> MappedRefresh<T, ID> build(Dao<T, ID> dao, TableInfo<T, ID> tableInfo) throws SQLException {
	FieldType idField = tableInfo.getIdField();
	if (idField == null) {
		throw new SQLException(
				"Cannot refresh " + tableInfo.getDataClass() + " because it doesn't have an id field");
	}
	DatabaseType databaseType = dao.getConnectionSource().getDatabaseType();
	String statement = buildStatement(databaseType, tableInfo, idField);
	return new MappedRefresh<T, ID>(dao, tableInfo, statement, new FieldType[] { tableInfo.getIdField() },
			tableInfo.getFieldTypes());
}
 
示例26
@Override
public CompiledStatement compileStatement(String statement, StatementType type, FieldType[] argFieldTypes,
		int resultFlags, boolean cacheStore) {
	// resultFlags argument is not used in Android-land since the {@link Cursor} is bi-directional.
	CompiledStatement stmt = new AndroidCompiledStatement(statement, db, type, cancelQueriesEnabled, cacheStore);
	logger.trace("{}: compiled statement got {}: {}", this, stmt, statement);
	return stmt;
}
 
示例27
@Override
public Object makeConfigObject(FieldType fieldType) throws SQLException {
	Map<String, Enum<?>> enumStringMap = new HashMap<String, Enum<?>>();
	Enum<?>[] constants = (Enum<?>[]) fieldType.getType().getEnumConstants();
	if (constants == null) {
		throw new SQLException(
				"Could not get enum-constants for field " + fieldType + ", not an enum or maybe generic?");
	}
	for (Enum<?> enumVal : constants) {
		enumStringMap.put(getEnumName(enumVal), enumVal);
	}
	return enumStringMap;
}
 
示例28
@Override
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) throws SQLException {
	if (fieldType == null) {
		return sqlArg;
	}
	String value = (String) sqlArg;
	@SuppressWarnings("unchecked")
	Map<String, Enum<?>> enumStringMap = (Map<String, Enum<?>>) fieldType.getDataTypeConfigObj();
	if (enumStringMap == null) {
		return enumVal(fieldType, value, null, fieldType.getUnknownEnumVal());
	} else {
		return enumVal(fieldType, value, enumStringMap.get(value), fieldType.getUnknownEnumVal());
	}
}
 
示例29
@Override
public Object sqlArgToJava(FieldType fieldType, Object sqlArg, int columnPos) {
	if (sqlArg == null) {
		return null;
	} else {
		return new Date((Long) sqlArg);
	}
}
 
示例30
@Override
public int insert(String statement, Object[] args, FieldType[] argfieldTypes, GeneratedKeyHolder keyHolder)
		throws SQLException {
	if (proxy == null) {
		return 0;
	} else {
		return proxy.insert(statement, args, argfieldTypes, keyHolder);
	}
}