1 package org.davidmoten.rx.jdbc;
2
3 import java.sql.Connection;
4
5 final class TxImpl<T> implements Tx<T> {
6
7 private final TransactedConnection con;
8 private final T value;
9 private final Throwable e;
10 private final boolean completed;
11 private final Database db;
12
13 TxImpl(Connection con, T value, Throwable e, boolean completed, Database db) {
14 this.db = db;
15 if (con instanceof TransactedConnection) {
16 this.con = (TransactedConnection) con;
17 } else {
18 this.con = new TransactedConnection(con);
19 }
20 this.value = value;
21 this.e = e;
22 this.completed = completed;
23 }
24
25 @Override
26 public boolean isValue() {
27 return !completed && e == null;
28 }
29
30 @Override
31 public boolean isComplete() {
32 return completed;
33 }
34
35 @Override
36 public boolean isError() {
37 return e != null;
38 }
39
40 @Override
41 public T value() {
42 return value;
43 }
44
45 @Override
46 public Throwable throwable() {
47 return e;
48 }
49
50 public TransactedConnection connection() {
51 return con;
52 }
53
54 @Override
55 public TransactedSelectBuilder select(String sql) {
56 return db.tx(this).select(sql);
57 }
58
59 @Override
60 public TransactedUpdateBuilder update(String sql) {
61 return db.tx(this).update(sql);
62 }
63
64 @Override
65 public TransactedCallableBuilder call(String sql) {
66 return db.tx(this).call(sql);
67 }
68
69 @Override
70 public String toString() {
71 StringBuilder builder = new StringBuilder();
72 builder.append("TxImpl [con=");
73 builder.append(con);
74 if (isValue()) {
75 builder.append(", value=");
76 builder.append(value);
77 } else if (isError()) {
78 builder.append(", error=");
79 builder.append(e);
80 } else {
81 builder.append(", completed=");
82 builder.append(completed);
83 }
84 builder.append("]");
85 return builder.toString();
86 }
87
88 }