57 |
57 |
this.conn = conn;
|
58 |
58 |
this.parentNode = null;
|
59 |
59 |
writeChildNodeToDB("DOCUMENT", null, null, docid);
|
|
60 |
updateRootNodeID(getNodeID());
|
60 |
61 |
}
|
61 |
62 |
|
62 |
63 |
/**
|
... | ... | |
91 |
92 |
if (nodetype == "DOCUMENT") {
|
92 |
93 |
pstmt = conn.prepareStatement(
|
93 |
94 |
"INSERT INTO xml_nodes " +
|
94 |
|
"(nodeid, nodetype, nodename, docid, rootnodeid) " +
|
95 |
|
"VALUES (?, ?, ?, ?, ?)");
|
|
95 |
"(nodetype, nodename, docid) " +
|
|
96 |
"VALUES (?, ?, ?)");
|
96 |
97 |
MetaCatUtil.debugMessage("INSERTING DOCNAME: " + nodename);
|
97 |
98 |
} else {
|
98 |
99 |
pstmt = conn.prepareStatement(
|
99 |
100 |
"INSERT INTO xml_nodes " +
|
100 |
|
"(nodeid, nodetype, nodename, docid, " +
|
|
101 |
"(nodetype, nodename, docid, " +
|
101 |
102 |
"rootnodeid, parentnodeid, nodedata, nodeindex) " +
|
102 |
|
"VALUES (?, ?, ?, ?, ?, ?, ?, ?)");
|
|
103 |
"VALUES (?, ?, ?, ?, ?, ?, ?)");
|
103 |
104 |
}
|
104 |
105 |
|
105 |
106 |
// Bind the values to the query
|
106 |
107 |
// NOT USED; USED DBAdapter.getUniqueID() instead
|
107 |
108 |
//long nid = generateNodeID();
|
108 |
|
long nid = dbAdapter.getUniqueID(conn, "xml_nodes");
|
109 |
|
pstmt.setLong(1, nid);
|
110 |
|
pstmt.setString(2, nodetype);
|
111 |
|
pstmt.setString(3, nodename);
|
112 |
|
pstmt.setString(4, docid);
|
|
109 |
// NOT USED
|
|
110 |
//let the db generate it: using identity key or through
|
|
111 |
//the db trigger xml_nodes_before_insert using sequence
|
|
112 |
//long nid = dbAdapter.getUniqueID(conn, "xml_nodes");
|
|
113 |
//pstmt.setLong(1, nid);
|
|
114 |
pstmt.setString(1, nodetype);
|
|
115 |
pstmt.setString(2, nodename);
|
|
116 |
pstmt.setString(3, docid);
|
113 |
117 |
if (nodetype == "DOCUMENT") {
|
114 |
|
pstmt.setLong(5, nid);
|
|
118 |
// moved it to separate method updateRootNodeID
|
|
119 |
//pstmt.setLong(4, nid);
|
115 |
120 |
} else {
|
116 |
121 |
if (nodetype == "ELEMENT") {
|
117 |
|
pstmt.setLong(5, getRootNodeID());
|
118 |
|
pstmt.setLong(6, getParentID());
|
119 |
|
pstmt.setString(7, data);
|
120 |
|
pstmt.setInt(8, getNodeIndex());
|
|
122 |
pstmt.setLong(4, getRootNodeID());
|
|
123 |
pstmt.setLong(5, getParentID());
|
|
124 |
pstmt.setString(6, data);
|
|
125 |
pstmt.setInt(7, getNodeIndex());
|
121 |
126 |
} else {
|
122 |
|
pstmt.setLong(5, getRootNodeID());
|
123 |
|
pstmt.setLong(6, getNodeID());
|
|
127 |
pstmt.setLong(4, getRootNodeID());
|
|
128 |
pstmt.setLong(5, getNodeID());
|
124 |
129 |
if ( nodetype == "TEXT" && getTagName().equals("meta_file_id") ) {
|
125 |
|
pstmt.setString(7, getDocID());
|
|
130 |
pstmt.setString(6, getDocID());
|
126 |
131 |
} else {
|
127 |
|
pstmt.setString(7, data);
|
|
132 |
pstmt.setString(6, data);
|
128 |
133 |
}
|
129 |
|
pstmt.setInt(8, incChildNum());
|
|
134 |
pstmt.setInt(7, incChildNum());
|
130 |
135 |
}
|
131 |
136 |
}
|
132 |
137 |
// Do the insertion
|
133 |
138 |
pstmt.execute();
|
134 |
139 |
pstmt.close();
|
|
140 |
|
|
141 |
// get the generated unique id afterward
|
|
142 |
long nid = dbAdapter.getUniqueID(conn, "xml_nodes");
|
135 |
143 |
|
136 |
144 |
if (nodetype.equals("DOCUMENT")) {
|
137 |
145 |
// Record the root node id that was generated from the database
|
... | ... | |
159 |
167 |
}
|
160 |
168 |
|
161 |
169 |
/**
|
|
170 |
* update rootnodeid=nodeid for 'DOCUMENT' type of nodes only
|
|
171 |
*/
|
|
172 |
public void updateRootNodeID(long nodeid) throws SAXException {
|
|
173 |
try {
|
|
174 |
PreparedStatement pstmt;
|
|
175 |
pstmt = conn.prepareStatement(
|
|
176 |
"UPDATE xml_nodes set rootnodeid = ? " +
|
|
177 |
"WHERE nodeid = ?");
|
|
178 |
|
|
179 |
// Bind the values to the query
|
|
180 |
pstmt.setLong(1, nodeid);
|
|
181 |
pstmt.setLong(2, nodeid);
|
|
182 |
// Do the update
|
|
183 |
pstmt.execute();
|
|
184 |
pstmt.close();
|
|
185 |
} catch (SQLException e) {
|
|
186 |
System.out.println("Error in DBSaxNode.updateRootNodeID: " +
|
|
187 |
e.getMessage());
|
|
188 |
throw new SAXException(e.getMessage());
|
|
189 |
}
|
|
190 |
}
|
|
191 |
|
|
192 |
/**
|
162 |
193 |
* creates SQL code to put nodename for the document node
|
163 |
194 |
* into DB connection
|
164 |
195 |
*/
|
Changed the order of generating and getting Unique ID for
xml_nodes.nodeid and for uniqueid part of the accession#
because of SQl Server capabilities:
first let the db to generate unique id on insert (by db trigger and sequence or by IDENTITY key),
then get that unique id for further use by the application.
Used to be the opposite for these 2 unique id generations.