author | Tero Marttila <terom@fixme.fi> |
Sat, 13 Dec 2008 18:55:01 +0200 | |
branch | new-evsql |
changeset 52 | f5037572c326 |
parent 48 | 8b019d191353 |
permissions | -rw-r--r-- |
34
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
1 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
2 |
#include "../lib/log.h" |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
3 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
4 |
#include "dbfs.h" |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
5 |
|
48
8b019d191353
update dbfs code to work with new evsql
Tero Marttila <terom@fixme.fi>
parents:
34
diff
changeset
|
6 |
void dbfs_rename_res (struct evsql_result *res, void *arg) { |
34
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
7 |
struct fuse_req *req = arg; |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
8 |
int err; |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
9 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
10 |
// check the results |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
11 |
if ((err = _dbfs_check_res(res, 0, 0))) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
12 |
SERROR(err = (err == 1 ? ENOENT : EIO)); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
13 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
14 |
// just reply |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
15 |
if ((err = -fuse_reply_err(req, 0))) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
16 |
EERROR(err, "fuse_reply_err"); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
17 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
18 |
// log |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
19 |
INFO("[dbfs.rename %p] -> OK", req); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
20 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
21 |
// fallthrough for result_free |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
22 |
err = 0; |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
23 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
24 |
error: |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
25 |
if (err && (err = -fuse_reply_err(req, err))) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
26 |
EWARNING(err, "fuse_reply_err"); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
27 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
28 |
evsql_result_free(res); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
29 |
} |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
30 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
31 |
void dbfs_rename (struct fuse_req *req, fuse_ino_t parent, const char *name, fuse_ino_t newparent, const char *newname) { |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
32 |
struct dbfs *dbfs_ctx = fuse_req_userdata(req); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
33 |
int err; |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
34 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
35 |
INFO("[dbfs.rename %p] parent=%lu, name=%s, newparent=%lu, newname=%s", req, parent, name, newparent, newname); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
36 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
37 |
// just one UPDATE |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
38 |
const char *sql = |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
39 |
"UPDATE" |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
40 |
" file_tree" |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
41 |
" SET parent = $1::int4, name = $2::varchar" |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
42 |
" WHERE parent = $3::int4 AND name = $4::varchar"; |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
43 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
44 |
static struct evsql_query_params params = EVSQL_PARAMS(EVSQL_FMT_BINARY) { |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
45 |
EVSQL_PARAM ( UINT32 ), |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
46 |
EVSQL_PARAM ( STRING ), |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
47 |
EVSQL_PARAM ( UINT32 ), |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
48 |
EVSQL_PARAM ( STRING ), |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
49 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
50 |
EVSQL_PARAMS_END |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
51 |
}; |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
52 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
53 |
if (0 |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
54 |
|| evsql_param_uint32(¶ms, 0, newparent) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
55 |
|| evsql_param_string(¶ms, 1, newname) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
56 |
|| evsql_param_uint32(¶ms, 2, parent) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
57 |
|| evsql_param_string(¶ms, 3, name) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
58 |
) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
59 |
SERROR(err = EIO); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
60 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
61 |
// query |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
62 |
if (evsql_query_params(dbfs_ctx->db, NULL, sql, ¶ms, dbfs_rename_res, req) == NULL) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
63 |
SERROR(err = EIO); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
64 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
65 |
// good, wait |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
66 |
return; |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
67 |
|
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
68 |
error: |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
69 |
if ((err = fuse_reply_err(req, err))) |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
70 |
EWARNING(err, "fuse_reply_err"); |
460f995d3769
fix readdir to use ORDER BY, rename
Tero Marttila <terom@fixme.fi>
parents:
diff
changeset
|
71 |
} |