File path: /hibernate-distribution-3.3.2.GA/project/core/src/main/java/org/hibernate/id/MultipleHiLoPerTableGenerator.java | File path: /hibernate-distribution-3.3.2.GA/project/core/src/main/java/org/hibernate/id/enhanced/TableStructure.java | |||
Method name: Serializable doWorkInCurrentTransaction(Connection, String)
|
Method name: Serializable doWorkInCurrentTransaction(Connection, String)
|
|||
Number of AST nodes: 22 | Number of AST nodes: 22 | |||
1 | int result;↵ | 1 | long result; ↵ | |
2 | int rows;↵ | 2 | int rows; ↵ | |
3 | do {↵ | 3 | do {↵ | |
4 | // The loop ensures atomicity of the↵ | |||
5 | // select + update even for no transaction↵ | |||
6 | // or read committed isolation level↵ | |||
7 | //sql = query;↵ | 4 | ↵ | |
8 | SQL_STATEMENT_LOGGER.logStatement( sql, FormatStyle.BASIC );↵ | 5 | SQL_STATEMENT_LOGGER.logStatement( selectQuery, FormatStyle.BASIC ); ↵ | |
9 | PreparedStatement qps = conn.prepareStatement(query);↵ | 6 | PreparedStatement selectPS = conn.prepareStatement(↵ | |
10 | PreparedStatement ips = null;↵ | |||
11 | try {↵ | |||
12 | //qps.setString(1, key);↵ | 7 | selectQuery );↵ | |
8 | try { ↵ | |||
13 | ResultSet rs = qps.executeQuery();↵ | 9 | ResultSet selectRS = selectPS.executeQuery(); ↵ | |
14 | boolean isInitialized = rs.next();↵ | 10 | ↵ | |
15 | if ( !isInitialized ) {↵ | 11 | if ( !selectRS.next() ) { ↵ | |
16 | result = 0;↵ | 12 | ↵ | |
17 | ips = conn.prepareStatement(insert);↵ | |||
18 | //ips.setString(1, key↵ | 13 | String err = "could not read a hi value - you need to populate the table: " + tableName;↵ | |
19 | );↵ | 14 | log.error( err ); ↵ | |
20 | ips.setInt(1, result);↵ | 15 | ↵ | |
21 | ips.execute();↵ | 16 | throw new IdentifierGenerationException( err ); ↵ | |
22 | }↵ | 17 | } ↵ | |
23 | else {↵ | |||
24 | result = rs.getInt(1);↵ | 18 | result = ↵ | |
25 | }↵ | |||
26 | rs↵ | 19 | selectRS.getLong( 1 );↵ | |
27 | .close();↵ | 20 | selectRS.close(); ↵ | |
28 | }↵ | 21 | } ↵ | |
29 | catch (SQLException sqle) {↵ | 22 | catch ( SQLException sqle ) { ↵ | |
30 | log.error("could not read or init a hi value", sqle);↵ | 23 | log.error( "could not read a hi value", sqle ); ↵ | |
31 | throw sqle;↵ | 24 | throw sqle; ↵ | |
32 | }↵ | 25 | } ↵ | |
33 | finally {↵ | 26 | finally { ↵ | |
34 | if (ips != null) {↵ | 27 | ↵ | |
35 | ips.close();↵ | 28 | selectPS.close(); ↵ | |
36 | }↵ | 29 | ↵ | |
37 | qps.close();↵ | |||
38 | }↵ | |||
39 | //sql = update;↵ | 30 | }↵ | |
31 | SQL_STATEMENT_LOGGER.logStatement( updateQuery, FormatStyle.BASIC ); ↵ | |||
40 | PreparedStatement ups = conn.prepareStatement(update);↵ | 32 | PreparedStatement updatePS = conn.prepareStatement( updateQuery ); ↵ | |
41 | try {↵ | 33 | try { ↵ | |
42 | ups.setInt( 1, result + 1 );↵ | 34 | int increment = applyIncrementSizeToSourceValues ? incrementSize : 1; ↵ | |
43 | ups.setInt( 2, result );↵ | 35 | updatePS.setLong( 1, result + increment ); ↵ | |
44 | //ups.setString( 3, key );↵ | 36 | updatePS.setLong( 2, result ); ↵ | |
45 | rows = ups.executeUpdate();↵ | 37 | rows = updatePS.executeUpdate(); ↵ | |
46 | }↵ | 38 | } ↵ | |
47 | catch (SQLException sqle) {↵ | 39 | catch ( SQLException sqle ) { ↵ | |
48 | log.error("could not update hi value in: " + tableName, sqle);↵ | 40 | log.error( "could not updateQuery hi value in: " + tableName, sqle ); ↵ | |
49 | throw sqle;↵ | 41 | throw sqle; ↵ | |
50 | }↵ | 42 | } ↵ | |
51 | finally {↵ | 43 | finally { ↵ | |
52 | ups.close();↵ | 44 | updatePS.close(); ↵ | |
53 | }↵ | 45 | } ↵ | |
54 | }↵ | 46 | }↵ | |
55 | while (rows==0);↵ | 47 | while ( rows == 0 );↵ | |
48 | accessCounter++;↵ | |||
49 | ↵ | |||
56 | return new Integer(result); | 50 | return new Long( result ); | |
See real code fragment | See real code fragment |
Number of common nesting structure subtrees | 1 |
Number of refactorable cases | 0 |
Number of non-refactorable cases | 1 |
Time elapsed for finding largest common nesting structure subtrees (ms) | 0.2 |
Clones location | Clones are in different classes having the same super class |
Number of node comparisons | 76 |
Number of mapped statements | 8 |
Number of unmapped statements in the first code fragment | 14 |
Number of unmapped statements in the second code fragment | 14 |
Time elapsed for statement mapping (ms) | 37.5 |
Clone type | Type 3 |
ID | Statement | ID | Statement | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | long result; | ||||||||||||||||||
1 | int result; |
| 2 | int rows; | ||||||||||||||||
2 | int rows; | | ||||||||||||||||||
21 | do while(rows == 0) | 20 | do while(rows == 0) | |||||||||||||||||
3 | SQL_STATEMENT_LOGGER.logStatement(sql, FormatStyle.BASIC); |
| 3 | SQL_STATEMENT_LOGGER.logStatement(selectQuery, FormatStyle.BASIC); | ||||||||||||||||
4 | PreparedStatement qps = conn.prepareStatement(query); |
| 4 | PreparedStatement selectPS = conn.prepareStatement(selectQuery); | ||||||||||||||||
|
| 5 | try | |||||||||||||||||
|
| 6 | ResultSet selectRS = selectPS.executeQuery(); | |||||||||||||||||
|
| 7 | if (!selectRS.next()) | |||||||||||||||||
|
| 8 | String err = "could not read a hi value - you need to populate the table: " + tableName; | |||||||||||||||||
| 9 | log.error(err); | ||||||||||||||||||
|
| 10 | throw new IdentifierGenerationException(err); | |||||||||||||||||
|
| 11 | result = selectRS.getLong(1); | |||||||||||||||||
|
| 12 | selectRS.close(); | |||||||||||||||||
5 | PreparedStatement ips = null; |
| | |||||||||||||||||
6 | try |
| | |||||||||||||||||
7 | ResultSet rs = qps.executeQuery(); |
| | |||||||||||||||||
8 | boolean isInitialized = rs.next(); |
| | |||||||||||||||||
9 | if (!isInitialized) | | ||||||||||||||||||
10 | result = 0; |
| | |||||||||||||||||
11 | ips = conn.prepareStatement(insert); | | ||||||||||||||||||
12 | ips.setInt(1, result); | | ||||||||||||||||||
13 | ips.execute(); | | ||||||||||||||||||
else | | |||||||||||||||||||
14 | result = rs.getInt(1); |
| | |||||||||||||||||
15 | rs.close(); |
| | |||||||||||||||||
| 13 | SQL_STATEMENT_LOGGER.logStatement(updateQuery, FormatStyle.BASIC); | ||||||||||||||||||
16 | PreparedStatement ups = conn.prepareStatement(update); |
| 14 | PreparedStatement updatePS = conn.prepareStatement(updateQuery); | ||||||||||||||||
17 | try |
| 15 | try | ||||||||||||||||
|
| 16 | int increment = applyIncrementSizeToSourceValues ? incrementSize : 1; | |||||||||||||||||
|
| 17 | updatePS.setLong(1, result + increment); | |||||||||||||||||
|
| 18 | updatePS.setLong(2, result); | |||||||||||||||||
18 | ups.setInt(1, result + 1); |
| | |||||||||||||||||
19 | ups.setInt(2, result); |
| | |||||||||||||||||
20 | rows = ups.executeUpdate(); |
| 19 | rows = updatePS.executeUpdate(); | ||||||||||||||||
|
| 21 | accessCounter++; | |||||||||||||||||
22 | return new Integer(result); |
| 22 | return new Long(result); |
Row | Violation |
---|---|
1 | Unmatched statement try cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
2 | Unmatched statement ResultSet selectRS=selectPS.executeQuery(); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
3 | Unmatched statement ResultSet selectRS=selectPS.executeQuery(); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
4 | Unmatched statement if(!selectRS.next()) cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
5 | Unmatched statement String err="could not read a hi value - you need to populate the table: " + tableName; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
6 | Unmatched throw new IdentifierGenerationException(err); |
7 | Unmatched statement result=selectRS.getLong(1); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
8 | Unmatched statement result=selectRS.getLong(1); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
9 | Unmatched statement selectRS.close(); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
10 | Unmatched statement PreparedStatement ips=null; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
11 | Unmatched statement try cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
12 | Unmatched statement ResultSet rs=qps.executeQuery(); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
13 | Unmatched statement ResultSet rs=qps.executeQuery(); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
14 | Unmatched statement boolean isInitialized=rs.next(); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
15 | Unmatched statement boolean isInitialized=rs.next(); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
16 | Unmatched statement result=0; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
17 | Unmatched statement result=rs.getInt(1); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
18 | Unmatched statement rs.close(); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
19 | Unmatched statement int increment=applyIncrementSizeToSourceValues ? incrementSize : 1; cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
20 | Unmatched statement updatePS.setLong(1,result + increment); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
21 | Unmatched statement updatePS.setLong(1,result + increment); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
22 | Unmatched statement updatePS.setLong(2,result); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
23 | Unmatched statement updatePS.setLong(2,result); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
24 | Unmatched statement ups.setInt(1,result + 1); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
25 | Unmatched statement ups.setInt(1,result + 1); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
26 | Unmatched statement ups.setInt(2,result); cannot be moved before or after the extracted code, because it has dependencies to/from statements that will be extracted |
27 | Unmatched statement ups.setInt(2,result); cannot be moved before or after the extracted code, because it throws exception(s) that should be caught by a try block that will be extracted |
28 | Unmatched statement accessCounter++; cannot be moved before the extracted code, because it has control dependencies from statements that will be extracted |
29 | Expression new Integer(result) cannot be parameterized, because it has dependencies to/from statements that will be extracted |
30 | Expression new Long(result) cannot be parameterized, because it has dependencies to/from statements that will be extracted |
31 | Type int of variable result does not match with type long of variable result |
32 | Clone fragment #1 returns variables qps, result, ups , while Clone fragment #2 returns variables selectPS, updatePS |