File: types.bs

package info (click to toggle)
storm-lang 0.7.4-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 52,004 kB
  • sloc: ansic: 261,462; cpp: 140,405; sh: 14,891; perl: 9,846; python: 2,525; lisp: 2,504; asm: 860; makefile: 678; pascal: 70; java: 52; xml: 37; awk: 12
file content (65 lines) | stat: -rw-r--r-- 1,251 bytes parent folder | download | duplicates (2)
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
56
57
58
59
60
61
62
63
64
65
use core:lang;
use lang:bs;
use lang:bs:macro;

/**
 * A SQL type.
 */
class SQLType {
	// Type in SQL.
	QueryType sqlType;

	// Storm-type.
	Type storm;

	init(QueryType sql, Type storm) {
		init {
			sqlType = sql;
			storm = storm;
		}
	}

	// Change size:
	SQLType sized(Nat size) {
		SQLType(sqlType.sized(size), storm);
	}
	SQLType sized(Str size) {
		sized(size.toNat());
	}

	Str toS() : override {
		QueryStrBuilder b;
		b.type(this);
		b.build.toS;
	}
}

// "put" function for the string builder:
void type(QueryStrBuilder to, SQLType this) {
	to.type(sqlType);
}


SQLType sqlInteger() {
	SQLType(QueryType:integer, named{Int});
}
SQLType sqlReal() {
	SQLType(QueryType:real, named{Double});
}
SQLType sqlText() {
	SQLType(QueryType:text, named{Str});
}

// Get a function for reading a particular type from a Row instance.
Function getColumnFn(Type? type) on Compiler {
	if (type is named{Bool})
		return named{Row:getBool<Row, Nat>};
	else if (type is named{Int})
		return named{Row:getInt<Row, Nat>};
	else if (type is named{Str})
		return named{Row:getStr<Row, Nat>};
	else if (type is named{Double})
		return named{Row:getDouble<Row, Nat>};
	else
		throw NotSupported("The type ${Value(type)} is not supported in the SQL library.");
}