blob: 8efef668e420a08de51c0177680c8907fa813d51 (
plain)
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
// file : odb/relational/sqlite/schema.cxx
// copyright : Copyright (c) 2009-2012 Code Synthesis Tools CC
// license : GNU GPL v3; see accompanying LICENSE file
#include <odb/relational/schema.hxx>
#include <odb/relational/sqlite/common.hxx>
#include <odb/relational/sqlite/context.hxx>
namespace relational
{
namespace sqlite
{
namespace schema
{
namespace relational = relational::schema;
//
// Create.
//
struct create_column: relational::create_column, context
{
create_column (base const& x): base (x) {}
virtual void
auto_ (sema_rel::column&)
{
if (options.sqlite_lax_auto_id ())
os << " /*AUTOINCREMENT*/";
else
os << " AUTOINCREMENT";
}
};
entry<create_column> create_column_;
struct create_foreign_key: relational::create_foreign_key, context
{
create_foreign_key (base const& x): base (x) {}
virtual string
table_name (sema_rel::foreign_key& fk)
{
// In SQLite, the referenced table cannot be qualified with the
// database name (it has to be in the same database anyway).
//
return quote_id (fk.referenced_table ().uname ());
}
};
entry<create_foreign_key> create_foreign_key_;
struct create_index: relational::create_index, context
{
create_index (base const& x): base (x) {}
virtual string
name (sema_rel::index& in)
{
// In SQLite, index names are database-global. Make them unique
// by prefixing the index name with table name (preserving the
// database).
//
sema_rel::qname n (
static_cast<sema_rel::table&> (in.scope ()).name ());
n.uname () += "_" + in.name ();
return quote_id (n);
}
virtual string
table_name (sema_rel::index& in)
{
// In SQLite, the index table cannot be qualified with the
// database name (it has to be in the same database).
//
return quote_id (
static_cast<sema_rel::table&> (in.scope ()).name ().uname ());
}
};
entry<create_index> create_index_;
}
}
}
|