Package com.hp.hpl.squirrelrdf.rdb

Source Code of com.hp.hpl.squirrelrdf.rdb.ResultSetIterator

/*
* (c) Copyright 2006 Hewlett-Packard Development Company, LP
* All rights reserved.
* [See end of file]
*/

package com.hp.hpl.squirrelrdf.rdb;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.NoSuchElementException;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.hp.hpl.jena.graph.Node;
import com.hp.hpl.jena.graph.impl.LiteralLabel;
import com.hp.hpl.jena.query.engine1.ExecutionContext;

/**
* ResultSetIterator
*
* Iterate over a ResultSet, mapping to rdf nodes as it goes.
*
* @author Damian Steer <pldms@mac.com>
*/
public class ResultSetIterator implements Iterator<Map<String, Node>>
{
  final static Log log = LogFactory.getLog(ResultSetIterator.class);

  private ResultSet resultset;

  private ProcessedPattern pattern;

  private boolean hasMoreResults;
 
  private ExecutionContext context;
 
  /**
   * Create a new result set wrapper
   * @param context
   *
   * @throws SQLException
   *
   */
  public ResultSetIterator(ResultSet resultset, ProcessedPattern pattern, ExecutionContext context)
      throws SQLException
  {
    this.resultset = resultset;
    this.pattern = pattern;
    this.hasMoreResults = resultset.next();
    this.context = context;   
  }

  public void remove()
  {
    throw new UnsupportedOperationException("Remove is not supported");
  }

  public boolean hasNext()
  {
    return hasMoreResults;
  }

  public Map<String, Node> next()
  {
    if (!hasMoreResults)
      throw new NoSuchElementException("No more results");
    try
    {
      return getNextBinding();
    }
    catch (SQLException e)
    {
      log.error("Error getting next result", e);
      throw new RuntimeException(e);
    }
  }

  /**
   * Get next binding, mapping results to rdf nodes
   *
   * @throws SQLException
   */
  private Map<String, Node> getNextBinding() throws SQLException
  {
    Map<String, Node> binding = new HashMap<String, Node>();
   
    for (String var : pattern.getVariables())
    {
      Object val = resultset.getObject(var);
      if (val == null)
        continue;

      // xsd:strings are just annoying...
      Node nodeVal;
      if (val instanceof String)
        nodeVal = Node.createLiteral((String) val);
      else
      {
        LiteralLabel ll = new LiteralLabel(val);
        nodeVal = Node.createLiteral(ll);
      }
     
      binding.put(var, nodeVal);
    }
   

    for (Node subject: pattern.getSubjects()) // bind subjects
    {
      if (subject.isConcrete()) continue; // nothing to do...
     
      Table table = pattern.getTableForSubject(subject);
     
      if (!table.hasPrimaryKeys()) // No row -> bnode mapping possible
      {
        binding.put(subject.getName(), Node.createAnon());
      }
      else
      {
        Map<String, Object> attvals = new HashMap<String, Object>();
       
        for (Col col: table.getPrimaryCols())
        {
          Object value = resultset.getObject(subject.getName() + "$" + col.getName() + "$prim");
          attvals.put(col.getName(), value);
        }
       
        Node node = table.keysToNode(attvals);
       
        binding.put(subject.getName(), node);
      }
    }
   
    hasMoreResults = resultset.next();
    if (!hasMoreResults) resultset.close();
   
    return binding;
  }
}

/*
* (c) Copyright 2006 Hewlett-Packard Development Company, LP All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* 1. Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer. 2. Redistributions in
* binary form must reproduce the above copyright notice, this list of
* conditions and the following disclaimer in the documentation and/or other
* materials provided with the distribution. 3. The name of the author may not
* be used to endorse or promote products derived from this software without
* specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
* EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/ 
TOP

Related Classes of com.hp.hpl.squirrelrdf.rdb.ResultSetIterator

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.