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
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
|
/* Copyright 2016 Software Freedom Conservancy Inc.
*
* This software is licensed under the GNU Lesser General Public License
* (version 2.1 or later). See the COPYING file in this distribution.
*/
namespace DataImports.FSpot.Db {
/**
* The value object for the "rolls" table, representing a single database row.
*/
public class FSpotRollRow : Object {
public int64 id;
public time_t time;
}
/**
* This class represents the F-Spot rolls table.
*/
public class FSpotRollsTable : FSpotDatabaseTable<FSpotRollRow> {
public static const string TABLE_NAME = "Rolls";
public static const string TABLE_NAME_PRE_V5 = "Imports";
public FSpotRollsTable(Sqlite.Database db, FSpotDatabaseBehavior db_behavior) {
base(db);
set_behavior(db_behavior.get_rolls_behavior());
}
public FSpotRollRow? get_by_id(int64 roll_id) throws DatabaseError {
Sqlite.Statement stmt;
FSpotRollRow? row = null;
string column_list = get_joined_column_list();
string sql = "SELECT %s FROM %s WHERE id=?".printf(column_list, table_name);
int res = fspot_db.prepare_v2(sql, -1, out stmt);
if (res != Sqlite.OK)
throw_error("Statement failed: %s".printf(sql), res);
res = stmt.bind_int64(1, roll_id);
if (res != Sqlite.OK)
throw_error("Bind failed for roll_id", res);
res = stmt.step();
if (res == Sqlite.ROW)
behavior.build_row(stmt, out row);
else if (res == Sqlite.DONE)
message("Could not find roll row with ID %d", (int)roll_id);
return row;
}
}
// Rolls table behavior for v0-4
public class FSpotRollsV0Behavior : FSpotTableBehavior<FSpotRollRow>, Object {
private static FSpotRollsV0Behavior instance;
private FSpotRollsV0Behavior() {
}
public static FSpotRollsV0Behavior get_instance() {
if (instance == null)
instance = new FSpotRollsV0Behavior();
return instance;
}
public string get_table_name() {
return FSpotRollsTable.TABLE_NAME_PRE_V5;
}
public string[] list_columns() {
return { "id", "time" };
}
public void build_row(Sqlite.Statement stmt, out FSpotRollRow row, int offset = 0) {
row = new FSpotRollRow();
row.id = stmt.column_int64(offset + 0);
row.time = (time_t) stmt.column_int64(offset + 1);
}
}
// Rolls table behavior for v5+
// Table name changed from "imports" to "rolls"
public class FSpotRollsV5Behavior : FSpotTableBehavior<FSpotRollRow>, Object {
private static FSpotRollsV5Behavior instance;
private FSpotRollsV5Behavior() {
}
public static FSpotRollsV5Behavior get_instance() {
if (instance == null)
instance = new FSpotRollsV5Behavior();
return instance;
}
public string get_table_name() {
return FSpotRollsTable.TABLE_NAME;
}
public string[] list_columns() {
return { "id", "time" };
}
public void build_row(Sqlite.Statement stmt, out FSpotRollRow row, int offset = 0) {
row = new FSpotRollRow();
row.id = stmt.column_int64(offset + 0);
row.time = (time_t) stmt.column_int64(offset + 1);
}
}
}
|