blob: 2c0c83a2a12583394d24728531ffa61edaf01e83 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2003-2011, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
package scala.dbc
package statement;
/** A statement that returns a relation. */
abstract class Relation extends Statement {
def isCompatibleType: (DataType,DataType)=>Boolean =
((dt,wdt)=>dt.isSubtypeOf(wdt));
def typeCheck (relation: result.Relation): Unit = {
val sameType: Boolean = (
relation.metadata.length == fieldTypes.length &&
(relation.metadata.zip(fieldTypes).forall({case Pair(field,expectedType) =>
isCompatibleType(field.datatype, expectedType)}))
);
if (!sameType)
throw new exception.IncompatibleSchema(fieldTypes,relation.metadata.map(field=>field.datatype));
}
def fieldTypes: List[DataType];
def sqlTypeString: String =
if (fieldTypes.isEmpty)
"UNTYPED"
else
fieldTypes.map(dt=>dt.sqlString).mkString("RELATION (",", ",")");
/** A SQL-99 compliant string representation of the statement. */
def sqlString: String;
/** A SQL-99 compliant string representation of the relation sub-
* statement. This only has a meaning inside another statement. */
def sqlInnerString: String;
/** Executes the statement on the given database. */
def execute (database: scala.dbc.Database): scala.dbc.result.Relation = {
database.executeStatement(this);
}
def execute (database:scala.dbc.Database, debug:Boolean): scala.dbc.result.Relation = {
database.executeStatement(this,debug);
}
}
|