Package net.sf.hajdbc

Examples of net.sf.hajdbc.SequenceSupport


   * @see net.sf.hajdbc.dialect.StandardDialectTest#parseSequence()
   */
  @Override
  public void parseSequence() throws SQLException
  {
    SequenceSupport support = this.dialect.getSequenceSupport();
   
    assertEquals("sequence", support.parseSequence("SELECT CURRVAL('sequence')"));
    assertEquals("sequence", support.parseSequence("SELECT nextval('sequence'), * FROM table"));
    assertEquals("sequence", support.parseSequence("INSERT INTO table VALUES (NEXTVAL('sequence'), 0)"));
    assertEquals("sequence", support.parseSequence("UPDATE table SET id = NEXTVAL('sequence')"));
    assertNull(support.parseSequence("SELECT NEXT VALUE FOR sequence"));
  }
View Full Code Here


   * @see net.sf.hajdbc.dialect.StandardDialectTest#parseSequence()
   */
  @Override
  public void parseSequence() throws SQLException
  {
    SequenceSupport support = this.dialect.getSequenceSupport();
    assertEquals("test", support.parseSequence("VALUES NEXTVAL FOR test"));
    assertEquals("test", support.parseSequence("INSERT INTO table VALUES (NEXTVAL FOR test, 0)"));
    assertEquals("test", support.parseSequence("INSERT INTO table VALUES (PREVVAL FOR test, 0)"));
    assertEquals("test", support.parseSequence("UPDATE table SET id = NEXTVAL FOR test"));
    assertEquals("test", support.parseSequence("UPDATE table SET id = PREVVAL FOR test"));
    assertNull(support.parseSequence("SELECT * FROM test"));
  }
View Full Code Here

   
    List<String> defaultSchemaList = dialect.getDefaultSchemas(metaData);
   
    this.defaultSchemas = new ArrayList<String>(defaultSchemaList);
   
    SequenceSupport support = dialect.getSequenceSupport();
    if (support != null)
    {
      for (SequenceProperties sequence: support.getSequences(metaData, support.createSequencePropertiesFactory(this.nameFactory)))
      {
        this.sequences.put(sequence.getName(), sequence);
      }
    }
   
View Full Code Here

  {
    super(provider.getDatabaseMetaData(), dialect);

    this.provider = provider;
    this.dialect = dialect;
    SequenceSupport support = dialect.getSequenceSupport();
    this.sequenceFactory = (support != null) ? support.createSequencePropertiesFactory(this.nameFactory) : null;
  }
View Full Code Here

   * @see net.sf.hajdbc.sync.SynchronizationSupport#synchronizeSequences()
   */
  @Override
  public void synchronizeSequences() throws SQLException
  {
    SequenceSupport support = this.context.getDialect().getSequenceSupport();
   
    if (support != null)
    {
      Collection<SequenceProperties> sequences = this.context.getSourceDatabaseProperties().getSequences();

      if (!sequences.isEmpty())
      {
        D sourceDatabase = this.context.getSourceDatabase();
       
        Set<D> databases = this.context.getActiveDatabaseSet();

        ExecutorService executor = this.context.getExecutor();
       
        Map<SequenceProperties, Long> sequenceMap = new HashMap<SequenceProperties, Long>();
        Map<D, Future<Long>> futureMap = new HashMap<D, Future<Long>>();

        for (SequenceProperties sequence: sequences)
        {
          final String sql = support.getNextSequenceValueSQL(sequence);
         
          this.logger.log(Level.DEBUG, sql);

          for (final D database: databases)
          {
            final SynchronizationContext<Z, D> context = this.context;
           
            Callable<Long> task = new Callable<Long>()
            {
              @Override
              public Long call() throws SQLException
              {
                Statement statement = context.getConnection(database).createStatement();
                try
                {
                  ResultSet resultSet = statement.executeQuery(sql);
                 
                  resultSet.next();
                 
                  return resultSet.getLong(1);
                }
                finally
                {
                  Resources.close(statement);
                }
              }
            };
           
            futureMap.put(database, executor.submit(task));
          }

          try
          {
            Long sourceValue = futureMap.get(sourceDatabase).get();
           
            sequenceMap.put(sequence, sourceValue);
           
            for (D database: databases)
            {
              if (!database.equals(sourceDatabase))
              {
                Long value = futureMap.get(database).get();
               
                if (!value.equals(sourceValue))
                {
                  throw new SQLException(Messages.SEQUENCE_OUT_OF_SYNC.getMessage(sequence, database, value, sourceDatabase, sourceValue));
                }
              }
            }
          }
          catch (InterruptedException e)
          {
            throw new SQLException(e);
          }
          catch (ExecutionException e)
          {
            throw ExceptionType.SQL.<SQLException>getExceptionFactory().createException(e.getCause());
          }
        }
       
        Connection targetConnection = this.context.getConnection(this.context.getTargetDatabase());
        Statement targetStatement = targetConnection.createStatement();
        try
        {
          for (SequenceProperties sequence: sequences)
          {
            String sql = support.getAlterSequenceSQL(sequence, sequenceMap.get(sequence) + 1);
           
            this.logger.log(Level.DEBUG, sql);
           
            targetStatement.addBatch(sql);
          }
View Full Code Here

  }
 
  @Test
  public void getAlterSequenceSQL() throws SQLException
  {
    SequenceSupport support = this.dialect.getSequenceSupport();
   
    if (support != null)
    {
      SequenceProperties sequence = mock(SequenceProperties.class);
      QualifiedName name = mock(QualifiedName.class);
     
      when(sequence.getName()).thenReturn(name);
      when(name.getDDLName()).thenReturn("sequence");
      when(sequence.getIncrement()).thenReturn(1);
     
      String result = support.getAlterSequenceSQL(sequence, 1000L);
     
      assertEquals("ALTER SEQUENCE sequence RESTART WITH 1000", result);
    }
  }
View Full Code Here

  }

  @Test
  public void getNextSequenceValueSQL() throws SQLException
  {
    SequenceSupport support = this.dialect.getSequenceSupport();
   
    if (support != null)
    {
      QualifiedName name = mock(QualifiedName.class);
      SequenceProperties sequence = mock(SequenceProperties.class);
     
      when(sequence.getName()).thenReturn(name);
      when(name.getDMLName()).thenReturn("sequence");
     
      String result = support.getNextSequenceValueSQL(sequence);
     
      assertEquals("SELECT NEXT VALUE FOR sequence", result);
    }
  }
View Full Code Here

  }

  @Test
  public void getSequences() throws SQLException
  {
    SequenceSupport support = this.dialect.getSequenceSupport();
   
    if (support != null)
    {
      SequencePropertiesFactory factory = mock(SequencePropertiesFactory.class);
      SequenceProperties sequence1 = mock(SequenceProperties.class);
      SequenceProperties sequence2 = mock(SequenceProperties.class);
      DatabaseMetaData metaData = mock(DatabaseMetaData.class);
      ResultSet resultSet = mock(ResultSet.class);
     
      when(metaData.supportsSchemasInTableDefinitions()).thenReturn(true);
      when(metaData.supportsSchemasInDataManipulation()).thenReturn(true);
      when(metaData.getTables(eq(""), eq((String) null), eq("%"), aryEq(new String[] { "SEQUENCE" }))).thenReturn(resultSet);
      when(resultSet.next()).thenReturn(true).thenReturn(true).thenReturn(false);
      when(resultSet.getString("TABLE_SCHEM")).thenReturn("schema1").thenReturn("schema2");
      when(resultSet.getString("TABLE_NAME")).thenReturn("sequence1").thenReturn("sequence2");
      when(factory.createSequenceProperties("schema1", "sequence1", 1)).thenReturn(sequence1);
      when(factory.createSequenceProperties("schema2", "sequence2", 1)).thenReturn(sequence2);
     
      Collection<SequenceProperties> results = support.getSequences(metaData, factory);
     
      verify(resultSet).close();
     
      assertEquals(2, results.size());
     
View Full Code Here

  }

  @Test
  public void parseSequence() throws SQLException
  {
    SequenceSupport support = this.dialect.getSequenceSupport();
   
    if (support != null)
    {
      assertEquals("test", support.parseSequence("SELECT NEXT VALUE FOR test"));
      assertEquals("test", support.parseSequence("SELECT NEXT VALUE FOR test, * FROM table"));
      assertEquals("test", support.parseSequence("INSERT INTO table VALUES (NEXT VALUE FOR test)"));
      assertEquals("test", support.parseSequence("UPDATE table SET id = NEXT VALUE FOR test"));
      assertNull(support.parseSequence("SELECT * FROM table"));
    }
  }
View Full Code Here

   * @see net.sf.hajdbc.dialect.StandardDialectTest#parseSequence()
   */
  @Override
  public void parseSequence() throws SQLException
  {
    SequenceSupport support = this.dialect.getSequenceSupport();
    assertEquals("sequence", support.parseSequence("SELECT sequence.nextval"));
    assertEquals("sequence", support.parseSequence("SELECT sequence.currval"));
    assertEquals("sequence", support.parseSequence("SELECT sequence.nextval, * FROM table"));
    assertEquals("sequence", support.parseSequence("SELECT sequence.currval, * FROM table"));
    assertEquals("sequence", support.parseSequence("SELECT sequence.nextval"));
    assertEquals("sequence", support.parseSequence("INSERT INTO table VALUES (sequence.nextval, 0)"));
    assertEquals("sequence", support.parseSequence("INSERT INTO table VALUES (sequence.currval, 0)"));
    assertEquals("sequence", support.parseSequence("UPDATE table SET id = sequence.nextval"));
    assertEquals("sequence", support.parseSequence("UPDATE table SET id = sequence.nextval"));
    assertNull(support.parseSequence("SELECT NEXT VALUE FOR sequence"));
  }
View Full Code Here

TOP

Related Classes of net.sf.hajdbc.SequenceSupport

Copyright © 2018 www.massapicom. 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.