Package com.j256.ormlite.db

Source Code of com.j256.ormlite.db.HsqldbDatabaseTypeTest$GeneratedIdLong

package com.j256.ormlite.db;

import static org.easymock.EasyMock.createMock;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;

import java.lang.reflect.Field;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.j256.ormlite.TestUtils;
import com.j256.ormlite.dao.BaseDaoImpl;
import com.j256.ormlite.field.DataPersister;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.field.FieldType;
import com.j256.ormlite.jdbc.JdbcConnectionSource;
import com.j256.ormlite.stmt.QueryBuilder;
import com.j256.ormlite.table.TableInfo;

public class HsqldbDatabaseTypeTest extends BaseJdbcDatabaseTypeTest {

  private final static String GENERATED_ID_SEQ = "genId_seq";

  @Override
  protected void setDatabaseParams() throws SQLException {
    databaseUrl = "jdbc:hsqldb:ormlite";
    connectionSource = new JdbcConnectionSource(DEFAULT_DATABASE_URL);
    databaseType = new HsqldbDatabaseType();
  }

  @Override
  protected boolean isDriverClassExpected() {
    return false;
  }

  @Override
  @Test
  public void testEscapedEntityName() {
    String word = "word";
    assertEquals("\"" + word + "\"", TestUtils.appendEscapedEntityName(databaseType, word));
  }

  @Test(expected = IllegalStateException.class)
  public void testBadGeneratedId() throws Exception {
    Field field = GeneratedId.class.getField("id");
    DatabaseType mockDb = createMock(DatabaseType.class);
    expect(mockDb.isIdSequenceNeeded()).andReturn(false);
    DataPersister dataPersister = createMock(DataPersister.class);
    expect(mockDb.getDataPersister(isA(DataPersister.class), isA(FieldType.class))).andReturn(dataPersister);
    expect(mockDb.getFieldConverter(isA(DataPersister.class), isA(FieldType.class))).andReturn(dataPersister);
    expect(mockDb.isEntityNamesMustBeUpCase()).andReturn(true);
    replay(mockDb);
    connectionSource.setDatabaseType(mockDb);
    try {
      FieldType fieldType = FieldType.createFieldType(connectionSource, "foo", field, GeneratedId.class);
      verify(mockDb);
      StringBuilder sb = new StringBuilder();
      List<String> statementsBefore = new ArrayList<String>();
      databaseType.appendColumnArg(null, sb, fieldType, null, statementsBefore, null, null);
    } finally {
      connectionSource.setDatabaseType(databaseType);
    }
  }

  @Test
  public void testDropSequence() throws Exception {
    Field field = GeneratedId.class.getField("id");
    FieldType fieldType = FieldType.createFieldType(connectionSource, "foo", field, GeneratedId.class);
    List<String> statementsBefore = new ArrayList<String>();
    List<String> statementsAfter = new ArrayList<String>();
    databaseType.dropColumnArg(fieldType, statementsBefore, statementsAfter);
    assertEquals(0, statementsBefore.size());
    assertEquals(1, statementsAfter.size());
    assertTrue(statementsAfter.get(0).contains("DROP SEQUENCE "));
  }

  @Override
  @Test
  public void testGeneratedIdSequence() throws Exception {
    TableInfo<GeneratedIdSequence, Integer> tableInfo =
        new TableInfo<GeneratedIdSequence, Integer>(connectionSource, null, GeneratedIdSequence.class);
    assertEquals(2, tableInfo.getFieldTypes().length);
    StringBuilder sb = new StringBuilder();
    List<String> additionalArgs = new ArrayList<String>();
    List<String> statementsBefore = new ArrayList<String>();
    databaseType.appendColumnArg(null, sb, tableInfo.getFieldTypes()[0], additionalArgs, statementsBefore, null,
        null);
    databaseType.addPrimaryKeySql(tableInfo.getFieldTypes(), additionalArgs, statementsBefore, null, null);
    assertTrue(sb + " should contain autoincrement stuff",
        sb.toString().contains(" GENERATED BY DEFAULT AS IDENTITY "));
    // sequence, sequence table, insert
    assertEquals(1, statementsBefore.size());
    assertTrue(statementsBefore.get(0).contains(GENERATED_ID_SEQ.toUpperCase()));
    assertEquals(1, additionalArgs.size());
    assertTrue(additionalArgs.get(0).contains("PRIMARY KEY"));
  }

  @Test
  public void testGeneratedIdSequenceAutoName() throws Exception {
    TableInfo<GeneratedIdSequenceAutoName, Integer> tableInfo =
        new TableInfo<GeneratedIdSequenceAutoName, Integer>(connectionSource, null,
            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>();
    databaseType.appendColumnArg(null, sb, idField, additionalArgs, statementsBefore, null, null);
    databaseType.addPrimaryKeySql(new FieldType[] { idField }, additionalArgs, statementsBefore, null, null);
    String seqName =
        databaseType.generateIdSequenceName(GeneratedIdSequenceAutoName.class.getSimpleName().toLowerCase(),
            idField);
    assertTrue(sb + " should contain gen-id-seq-name stuff",
        sb.toString().contains(" GENERATED BY DEFAULT AS IDENTITY "));
    // sequence, sequence table, insert
    assertEquals(1, statementsBefore.size());
    assertTrue(statementsBefore.get(0).contains(seqName.toUpperCase()));
    assertEquals(1, additionalArgs.size());
    assertTrue(additionalArgs.get(0).contains("PRIMARY KEY"));
  }

  @Override
  @Test
  public void testFieldWidthSupport() {
    assertFalse(databaseType.isVarcharFieldWidthSupported());
  }

  @Override
  @Test
  public void testLimitAfterSelect() {
    assertTrue(databaseType.isLimitAfterSelect());
  }

  @Override
  @Test
  public void testLimitFormat() throws Exception {
    connectionSource.setDatabaseType(databaseType);
    BaseDaoImpl<StringId, String> dao = new BaseDaoImpl<StringId, String>(connectionSource, StringId.class) {
    };
    dao.initialize();
    QueryBuilder<StringId, String> qb = dao.queryBuilder();
    long limit = 1232;
    qb.limit(limit);
    String query = qb.prepareStatementString();
    assertTrue(query + " should start with stuff", query.startsWith("SELECT LIMIT 0 " + limit + " "));
  }

  @Test
  public void testBoolean() throws Exception {
    TableInfo<AllTypes, Integer> tableInfo =
        new TableInfo<AllTypes, Integer>(connectionSource, null, AllTypes.class);
    assertEquals(9, tableInfo.getFieldTypes().length);
    FieldType booleanField = tableInfo.getFieldTypes()[1];
    assertEquals("booleanField", booleanField.getColumnName());
    StringBuilder sb = new StringBuilder();
    List<String> additionalArgs = new ArrayList<String>();
    List<String> statementsBefore = new ArrayList<String>();
    databaseType.appendColumnArg(null, sb, booleanField, additionalArgs, statementsBefore, null, null);
    assertTrue(sb.toString().contains("BIT"));
  }

  @Override
  protected void testPingValue(long value) {
    assertTrue(value >= 1);
  }

  private final static String LONG_SEQ_NAME = "longseq";

  @Test
  public void testGneratedIdLong() throws Exception {
    TableInfo<GeneratedIdLong, Long> tableInfo =
        new TableInfo<GeneratedIdLong, Long>(connectionSource, null, GeneratedIdLong.class);
    assertEquals(2, tableInfo.getFieldTypes().length);
    FieldType idField = tableInfo.getFieldTypes()[0];
    assertEquals("genId", idField.getColumnName());
    StringBuilder sb = new StringBuilder();
    List<String> additionalArgs = new ArrayList<String>();
    List<String> statementsBefore = new ArrayList<String>();
    databaseType.appendColumnArg(null, sb, idField, additionalArgs, statementsBefore, null, null);
    assertEquals(1, statementsBefore.size());
    StringBuilder sb2 = new StringBuilder();
    sb2.append("CREATE SEQUENCE ");
    databaseType.appendEscapedEntityName(sb2, LONG_SEQ_NAME.toUpperCase());
    sb2.append(" AS BIGINT");
    assertTrue(statementsBefore.get(0) + " should contain the right stuff",
        statementsBefore.get(0).contains(sb2.toString()));
  }

  protected static class GeneratedIdLong {
    @DatabaseField(generatedIdSequence = LONG_SEQ_NAME)
    long genId;
    @DatabaseField
    public String stuff;
  }
}
TOP

Related Classes of com.j256.ormlite.db.HsqldbDatabaseTypeTest$GeneratedIdLong

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.