select.scala
来自「JAVA 语言的函数式编程扩展」· SCALA 代码 · 共 100 行
SCALA
100 行
/* __ *\** ________ ___ / / ___ Scala API **** / __/ __// _ | / / / _ | (c) 2003-2007, LAMP/EPFL **** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **** /____/\___/_/ |_/____/_/ | | **** |/ **\* */// $Id:Select.scala 6853 2006-03-20 16:58:47 +0100 (Mon, 20 Mar 2006) dubochet $package scala.dbc.statement/** A statement that when executed on a database will return a relation. * The returned relation will be a subset of a table in the database or * a jointure between such subsets. */abstract class Select extends Relation { /** Defines if duplicated tuples should be removed from the returned * relation. <h3>Compatibility notice</h3> Some DBMS (PostgreSQL) allow * uniqueness constrains on an arbitrary field instead of the entire * tuple. */ def setQuantifier: Option[SetQuantifier] /** Defines the output fields that a tuple in the returned relation will * contain, and their content with respect to the tables in the * database. If the fields are not specified (that is the list is * empty), all possible input fields will be returned. <h3>Compatibility * notice</h3> SQL's qualified asterisk select sublist is not * available. */ def selectList: List[DerivedColumn] /** Defines the relations from which the query will obtain its data.*/ def fromClause: List[Relation] /** Defines condition that must be true in the returned relation's tuples. * This value expression must return a boolean or boolean-compatible * value. This condition is applied before any GROUP BY clause. */ def whereClause: Option[Expression] /** Defines the grouping of the returned relation's tuples. One tuple is * returned for every group. The value of <code>selectList</code> must * use aggregate functions for calculation. */ def groupByClause: Option[List[Expression]] /** Defines conditions that must be true in the returned relation's tuples. * The value expression must return a boolean can only refer to fields * that are grouped or to any field from inside an aggregate function. */ def havingClause: Option[Expression] /* def windowClause: Option[_]; */ /** A SQL-99 compliant string representation of the select statement. */ def sqlString: String = ( "SELECT" + (setQuantifier match { case None => "" case Some(sq) => " " + sq.sqlString }) + (selectList match { case Nil => " *" case _ => (" " + selectList.tail.foldLeft(selectList.head.sqlString) ((name:String, dc:DerivedColumn) => name + ", " + dc.sqlString)) }) + (fromClause match { case Nil => error("Empty from clause is not allowed") case _ => (" FROM " + fromClause.tail.foldLeft(fromClause.head.sqlInnerString) ((name:String, rel:Relation) => name + ", " + rel.sqlInnerString)) }) + (whereClause match { case None => "" case Some(expr) => " WHERE " + expr.sqlInnerString }) + (groupByClause match { case None => "" case Some(gbl) => gbl match { case Nil => error("Empty group by clause is not allowed") case _ => (" GROUP BY " + gbl.tail.foldLeft(gbl.head.sqlInnerString) ((name:String, gb) => name + ", " + gb.sqlInnerString)) } }) + (havingClause match { case None => "" case Some(expr) => " HAVING " + expr.sqlString }) ); /** A SQL-99 compliant string representation of the relation sub- * statement. This only has a meaning inside a query. */ def sqlInnerString: String = "("+sqlString+")" }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?