relation.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 73 行
SCALA
73 行
/* __ *\** ________ ___ / / ___ Scala API **** / __/ __// _ | / / / _ | (c) 2003-2007, LAMP/EPFL **** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **** /____/\___/_/ |_/____/_/ | | **** |/ **\* */// $Id:Relation.scala 6853 2006-03-20 16:58:47 +0100 (Mon, 20 Mar 2006) dubochet $package scala.dbc.result/** An ISO-9075:2003 (SQL) table. This is equivalent to a relation in the * relational model. */abstract class Relation extends AnyRef with Iterable[Tuple] { /** The statement that generated this relation. */ def statement: scala.dbc.statement.Relation /** A JDBC result containing this relation. */ protected def sqlResult: java.sql.ResultSet /** A JDBC metadata object attached to the relation. */ protected def sqlMetadata: java.sql.ResultSetMetaData = sqlResult.getMetaData() /** Metadata about all fields in a tuple of the relation. */ def metadata: List[FieldMetadata] = for (count <- List.range(1, sqlMetadata.getColumnCount()+1)) yield new FieldMetadata { val name: String = sqlMetadata.getColumnName(count) val index: Int = count val datatype: DataType = dbc.datatype.Factory.create(sqlMetadata,count) val catalog: String = sqlMetadata.getCatalogName(count) val schema: String = sqlMetadata.getSchemaName(count) val table: String = sqlMetadata.getTableName(count) } /** Metadata about the field at the given index. If there is no such * field <code>None</code> is returned instead. */ def metadataFor (index:Int): Option[FieldMetadata] = try {Some(metadata(index))} catch {case e => None} /** Metadata about the field with the given column name. If there is no * such field, <code>None</code> is returned instead. */ def metadataFor (name:String): Option[FieldMetadata] = metadata.find(f=>(f.name==name)); /** An iterator on the tuples of the relation. * <h3>Caution</h3> A Relation only has one single iterator, due to limitations * in DBMS. This means that if this method is called multiple times, all returned * iterators will share the same state. */ def elements: Iterator[Tuple] = new Iterator[Tuple] { protected val result: java.sql.ResultSet = Relation.this.sqlResult def hasNext: Boolean = !(result.isLast()) def next: Tuple = { if (result.next()) { new Tuple { val me = this val originatingRelation = Relation.this val fields: List[Field] = for (fieldMetadata <- metadata) yield new Field { val metadata = fieldMetadata val content = dbc.value.Factory.create(result,metadata.index,metadata.datatype) val originatingTuple = me } } } else error("next on empty iterator") } }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?