1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.dbunit.ext.mssql;
21
22 import java.sql.PreparedStatement;
23 import java.sql.ResultSet;
24 import java.sql.SQLException;
25 import java.sql.Types;
26 import java.util.UUID;
27
28 import org.dbunit.dataset.datatype.AbstractDataType;
29 import org.dbunit.dataset.datatype.TypeCastException;
30
31
32
33
34
35
36
37
38
39 public class UniqueIdentifierType extends AbstractDataType {
40 static final String UNIQUE_IDENTIFIER_TYPE = "uniqueidentifier";
41
42 public UniqueIdentifierType() {
43 super(UNIQUE_IDENTIFIER_TYPE, Types.CHAR, UUID.class, false);
44 }
45
46 @Override
47 public Object typeCast(Object value) throws TypeCastException {
48 return value.toString();
49 }
50
51 @Override
52 public Object getSqlValue(int column, ResultSet resultSet) throws SQLException, TypeCastException {
53 String value = resultSet.getString(column);
54
55 try {
56 return value != null && value.length() > 0 ? UUID.fromString(value)
57 : null;
58 } catch (IllegalArgumentException error) {
59 throw new TypeCastException("Invalid UUID: " + value, error);
60 }
61 }
62
63 @Override
64 public void setSqlValue(Object value, int column, PreparedStatement statement) throws SQLException,
65 TypeCastException {
66 if (value == null)
67 {
68 statement.setObject(column, null);
69 } else
70 {
71 statement.setObject(column, value.toString());
72 }
73 }
74 }