embulk-output-kintone 0.4.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (95) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +63 -5
  3. data/build.gradle +1 -0
  4. data/classpath/commons-csv-1.9.0.jar +0 -0
  5. data/classpath/embulk-output-kintone-1.1.0.jar +0 -0
  6. data/classpath/externalsortinginjava-0.6.2.jar +0 -0
  7. data/classpath/{shadow-kintone-java-client-0.4.1-all.jar → shadow-kintone-java-client-1.1.0-all.jar} +0 -0
  8. data/src/main/java/org/embulk/output/kintone/KintoneColumnOption.java +6 -2
  9. data/src/main/java/org/embulk/output/kintone/KintoneColumnType.java +572 -0
  10. data/src/main/java/org/embulk/output/kintone/KintoneColumnVisitor.java +214 -135
  11. data/src/main/java/org/embulk/output/kintone/KintoneMode.java +0 -1
  12. data/src/main/java/org/embulk/output/kintone/KintoneOutputPlugin.java +12 -5
  13. data/src/main/java/org/embulk/output/kintone/KintonePageOutput.java +180 -160
  14. data/src/main/java/org/embulk/output/kintone/KintoneSortColumn.java +33 -0
  15. data/src/main/java/org/embulk/output/kintone/PluginTask.java +35 -0
  16. data/src/main/java/org/embulk/output/kintone/deserializer/DeserializeApplier.java +19 -0
  17. data/src/main/java/org/embulk/output/kintone/deserializer/DeserializeException.java +7 -0
  18. data/src/main/java/org/embulk/output/kintone/deserializer/Deserializer.java +279 -0
  19. data/src/main/java/org/embulk/output/kintone/reducer/CSVInputColumnVisitor.java +78 -0
  20. data/src/main/java/org/embulk/output/kintone/reducer/CSVOutputColumnVisitor.java +79 -0
  21. data/src/main/java/org/embulk/output/kintone/reducer/ReduceException.java +11 -0
  22. data/src/main/java/org/embulk/output/kintone/reducer/ReduceType.java +190 -0
  23. data/src/main/java/org/embulk/output/kintone/reducer/ReducedPageOutput.java +100 -0
  24. data/src/main/java/org/embulk/output/kintone/reducer/Reducer.java +355 -0
  25. data/src/test/java/org/embulk/output/kintone/KintoneColumnOptionBuilder.java +9 -3
  26. data/src/test/java/org/embulk/output/kintone/KintoneColumnTypeTest.java +194 -0
  27. data/src/test/java/org/embulk/output/kintone/KintoneColumnVisitorTest.java +703 -61
  28. data/src/test/java/org/embulk/output/kintone/KintoneColumnVisitorVerifier.java +45 -14
  29. data/src/test/java/org/embulk/output/kintone/KintonePageOutputVerifier.java +43 -5
  30. data/src/test/java/org/embulk/output/kintone/TestKintoneOutputPlugin.java +106 -16
  31. data/src/test/java/org/embulk/output/kintone/TestTaskMode.java +12 -0
  32. data/src/test/java/org/embulk/output/kintone/TestTaskReduce.java +46 -0
  33. data/src/test/java/org/embulk/output/kintone/TestTaskReduceException.java +50 -0
  34. data/src/test/java/org/embulk/output/kintone/TestTaskReduceSubtable.java +46 -0
  35. data/src/test/java/org/embulk/output/kintone/deserializer/DeserializerTest.java +165 -0
  36. data/src/test/java/org/embulk/output/kintone/reducer/ReduceTypeTest.java +154 -0
  37. data/src/test/resources/org/embulk/output/kintone/task/config.yml +1 -1
  38. data/src/test/resources/org/embulk/output/kintone/task/mode/config.yml +110 -0
  39. data/src/test/resources/org/embulk/output/kintone/task/mode/input.csv +7 -7
  40. data/src/test/resources/org/embulk/output/kintone/task/mode/insert_add_ignore_nulls_records.jsonl +6 -0
  41. data/src/test/resources/org/embulk/output/kintone/task/mode/insert_add_prefer_nulls_records.jsonl +6 -0
  42. data/src/test/resources/org/embulk/output/kintone/task/mode/insert_add_records.jsonl +6 -6
  43. data/src/test/resources/org/embulk/output/kintone/task/mode/update_update_ignore_nulls_records.jsonl +3 -0
  44. data/src/test/resources/org/embulk/output/kintone/task/mode/update_update_prefer_nulls_records.jsonl +3 -0
  45. data/src/test/resources/org/embulk/output/kintone/task/mode/update_update_records.jsonl +6 -3
  46. data/src/test/resources/org/embulk/output/kintone/task/mode/upsert_add_ignore_nulls_records.jsonl +3 -0
  47. data/src/test/resources/org/embulk/output/kintone/task/mode/upsert_add_prefer_nulls_records.jsonl +3 -0
  48. data/src/test/resources/org/embulk/output/kintone/task/mode/upsert_add_records.jsonl +2 -2
  49. data/src/test/resources/org/embulk/output/kintone/task/mode/upsert_update_ignore_nulls_records.jsonl +3 -0
  50. data/src/test/resources/org/embulk/output/kintone/task/mode/upsert_update_prefer_nulls_records.jsonl +3 -0
  51. data/src/test/resources/org/embulk/output/kintone/task/mode/upsert_update_records.jsonl +4 -4
  52. data/src/test/resources/org/embulk/output/kintone/task/mode/values_ignore_nulls.json +1 -0
  53. data/src/test/resources/org/embulk/output/kintone/task/mode/values_prefer_nulls.json +1 -0
  54. data/src/test/resources/org/embulk/output/kintone/task/reduce/config.yml +171 -0
  55. data/src/test/resources/org/embulk/output/kintone/task/reduce/input.csv +7 -0
  56. data/src/test/resources/org/embulk/output/kintone/task/reduce/insert_add_ignore_nulls_records.jsonl +6 -0
  57. data/src/test/resources/org/embulk/output/kintone/task/reduce/insert_add_prefer_nulls_records.jsonl +6 -0
  58. data/src/test/resources/org/embulk/output/kintone/task/reduce/insert_add_records.jsonl +6 -0
  59. data/src/test/resources/org/embulk/output/kintone/task/reduce/update_update_ignore_nulls_records.jsonl +3 -0
  60. data/src/test/resources/org/embulk/output/kintone/task/reduce/update_update_prefer_nulls_records.jsonl +3 -0
  61. data/src/test/resources/org/embulk/output/kintone/task/reduce/update_update_records.jsonl +6 -0
  62. data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_add_ignore_nulls_records.jsonl +3 -0
  63. data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_add_prefer_nulls_records.jsonl +3 -0
  64. data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_add_records.jsonl +2 -0
  65. data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_update_ignore_nulls_records.jsonl +3 -0
  66. data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_update_prefer_nulls_records.jsonl +3 -0
  67. data/src/test/resources/org/embulk/output/kintone/task/reduce/upsert_update_records.jsonl +4 -0
  68. data/src/test/resources/org/embulk/output/kintone/task/reduce/values.json +1 -0
  69. data/src/test/resources/org/embulk/output/kintone/task/reduce/values_ignore_nulls.json +1 -0
  70. data/src/test/resources/org/embulk/output/kintone/task/reduce/values_prefer_nulls.json +1 -0
  71. data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/config.yml +36 -0
  72. data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/derived_columns.json +1 -0
  73. data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/input.csv +13 -0
  74. data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/insert_add_records.jsonl +2 -0
  75. data/src/test/resources/org/embulk/output/kintone/task/reduce_exception/update_update_records.jsonl +2 -0
  76. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/config.yml +343 -0
  77. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/derived_columns.json +1 -0
  78. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/input.csv +13 -0
  79. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/insert_add_ignore_nulls_records.jsonl +6 -0
  80. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/insert_add_prefer_nulls_records.jsonl +6 -0
  81. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/insert_add_records.jsonl +6 -0
  82. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/update_update_ignore_nulls_records.jsonl +3 -0
  83. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/update_update_prefer_nulls_records.jsonl +3 -0
  84. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/update_update_records.jsonl +6 -0
  85. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_add_ignore_nulls_records.jsonl +3 -0
  86. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_add_prefer_nulls_records.jsonl +3 -0
  87. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_add_records.jsonl +0 -0
  88. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_update_ignore_nulls_records.jsonl +3 -0
  89. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_update_prefer_nulls_records.jsonl +3 -0
  90. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/upsert_update_records.jsonl +6 -0
  91. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/values.json +1 -0
  92. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/values_ignore_nulls.json +1 -0
  93. data/src/test/resources/org/embulk/output/kintone/task/reduce_subtable/values_prefer_nulls.json +1 -0
  94. metadata +73 -4
  95. data/classpath/embulk-output-kintone-0.4.1.jar +0 -0
@@ -1,160 +1,658 @@
1
1
  package org.embulk.output.kintone;
2
2
 
3
+ import static org.embulk.output.kintone.KintoneColumnTypeTest.date;
4
+ import static org.embulk.output.kintone.KintoneColumnTypeTest.dateTime;
5
+ import static org.embulk.output.kintone.KintoneColumnTypeTest.list;
6
+ import static org.embulk.output.kintone.KintoneColumnTypeTest.number;
7
+ import static org.embulk.output.kintone.KintoneColumnTypeTest.rows;
8
+ import static org.embulk.output.kintone.KintoneColumnTypeTest.time;
9
+ import static org.embulk.output.kintone.deserializer.DeserializerTest.assertTableRows;
3
10
  import static org.hamcrest.MatcherAssert.assertThat;
4
11
  import static org.hamcrest.Matchers.is;
5
12
  import static org.hamcrest.Matchers.nullValue;
13
+ import static org.junit.Assert.assertThrows;
6
14
 
7
15
  import com.google.common.collect.ImmutableMap;
8
- import java.math.BigDecimal;
16
+ import com.kintone.client.model.record.FieldType;
9
17
  import java.time.Instant;
10
- import java.time.LocalDate;
11
- import java.time.ZoneId;
12
- import java.time.ZonedDateTime;
13
18
  import java.util.AbstractMap;
14
- import java.util.Arrays;
15
- import java.util.List;
19
+ import java.util.Collections;
16
20
  import java.util.Map;
17
21
  import java.util.function.Function;
22
+ import org.embulk.output.kintone.deserializer.DeserializerTest;
18
23
  import org.embulk.spi.Page;
19
24
  import org.embulk.spi.Schema;
25
+ import org.embulk.spi.json.JsonParser;
20
26
  import org.embulk.spi.time.Timestamp;
21
27
  import org.embulk.spi.type.Types;
22
28
  import org.junit.Test;
29
+ import org.msgpack.value.Value;
23
30
  import org.msgpack.value.ValueFactory;
24
31
 
25
32
  public class KintoneColumnVisitorTest {
33
+ private static final JsonParser PARSER = new JsonParser();
34
+ private static final String[] ROWS = {
35
+ DeserializerTest.TABLE_ROW.apply(0L),
36
+ DeserializerTest.TABLE_ROW.apply(1L),
37
+ DeserializerTest.TABLE_ROW.apply(2L),
38
+ DeserializerTest.TABLE_ROW.apply(3L),
39
+ DeserializerTest.TABLE_ROW.apply(4L),
40
+ DeserializerTest.TABLE_ROW.apply(5L),
41
+ };
42
+
26
43
  @Test
27
44
  public void test() {
28
- Schema schema = build(Schema.builder());
29
- KintoneColumnVisitorVerifier verifier =
30
- new KintoneColumnVisitorVerifier(
31
- schema,
32
- build(ImmutableMap.builder()),
33
- "STRING|SINGLE_LINE_TEXT",
34
- OutputPageBuilder.build(schema, KintoneColumnVisitorTest::build));
45
+ KintoneColumnVisitorVerifier verifier = verifier(null, "STRING|SINGLE_LINE_TEXT");
35
46
  verifier.verify(
36
47
  (record, updateKey) -> {
37
48
  assertThat(record.getSingleLineTextFieldValue("BOOLEAN|SINGLE_LINE_TEXT"), is("false"));
38
- assertThat(record.getNumberFieldValue("BOOLEAN"), nullValue());
39
- assertThat(record.getSingleLineTextFieldValue("LONG|SINGLE_LINE_TEXT"), is(""));
40
- assertThat(record.getNumberFieldValue("LONG"), nullValue());
49
+ assertThat(record.getNumberFieldValue("BOOLEAN"), is(number("0")));
50
+ assertThat(record.getSingleLineTextFieldValue("LONG|SINGLE_LINE_TEXT"), is("0"));
51
+ assertThat(record.getNumberFieldValue("LONG"), is(number("0")));
52
+ assertThat(record.getDateFieldValue("LONG|DATE"), is(date("1970-01-01")));
53
+ assertThat(record.getDateFieldValue("LONG|DATE|JST"), is(date("1970-01-01")));
54
+ assertThat(record.getDateFieldValue("LONG|DATE|PST"), is(date("1969-12-31")));
55
+ assertThat(record.getTimeFieldValue("LONG|TIME"), is(time("00:00:00")));
56
+ assertThat(record.getTimeFieldValue("LONG|TIME|JST"), is(time("09:00:00")));
57
+ assertThat(record.getTimeFieldValue("LONG|TIME|PST"), is(time("16:00:00")));
58
+ assertThat(
59
+ record.getDateTimeFieldValue("LONG|DATETIME"), is(dateTime("1970-01-01T00:00:00Z")));
41
60
  assertThat(record.getSingleLineTextFieldValue("DOUBLE|SINGLE_LINE_TEXT"), is("0.0"));
42
61
  assertThat(record.getNumberFieldValue("DOUBLE"), is(number("0.0")));
62
+ assertThat(record.getDateFieldValue("DOUBLE|DATE"), is(date("1970-01-01")));
63
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|JST"), is(date("1970-01-01")));
64
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|PST"), is(date("1969-12-31")));
65
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME"), is(time("00:00:00")));
66
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|JST"), is(time("09:00:00")));
67
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|PST"), is(time("16:00:00")));
68
+ assertThat(
69
+ record.getDateTimeFieldValue("DOUBLE|DATETIME"),
70
+ is(dateTime("1970-01-01T00:00:00Z")));
43
71
  assertThat(record.getSingleLineTextFieldValue("STRING|SINGLE_LINE_TEXT"), is(""));
44
72
  assertThat(record.getMultiLineTextFieldValue("STRING"), is(""));
45
- assertThat(record.getNumberFieldValue("STRING|NUMBER"), nullValue());
46
- assertThat(record.getCheckBoxFieldValue("STRING|CHECK_BOX"), is(list("null")));
73
+ assertThat(record.getRichTextFieldValue("STRING|RICH_TEXT"), is(""));
74
+ assertThat(record.getNumberFieldValue("STRING|NUMBER"), is(number("0")));
75
+ assertThat(record.getCheckBoxFieldValue("STRING|CHECK_BOX"), is(list()));
76
+ assertThat(record.getRadioButtonFieldValue("STRING|RADIO_BUTTON"), is(""));
77
+ assertThat(record.getMultiSelectFieldValue("STRING|MULTI_SELECT"), is(list()));
47
78
  assertThat(record.getDropDownFieldValue("STRING|DROP_DOWN"), is(""));
79
+ assertThat(record.getDateFieldValue("STRING|DATE"), is(date("1970-01-01")));
80
+ assertThat(record.getDateFieldValue("STRING|DATE|JST"), is(date("1970-01-01")));
81
+ assertThat(record.getDateFieldValue("STRING|DATE|PST"), is(date("1969-12-31")));
82
+ assertThat(record.getTimeFieldValue("STRING|TIME"), is(time("00:00:00")));
83
+ assertThat(record.getTimeFieldValue("STRING|TIME|JST"), is(time("09:00:00")));
84
+ assertThat(record.getTimeFieldValue("STRING|TIME|PST"), is(time("16:00:00")));
85
+ assertThat(
86
+ record.getDateTimeFieldValue("STRING|DATETIME"),
87
+ is(dateTime("1970-01-01T00:00:00Z")));
48
88
  assertThat(record.getLinkFieldValue("STRING|LINK"), is(""));
49
- assertThat(record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"), nullValue());
50
- assertThat(record.getDateFieldValue("TIMESTAMP|DATE"), nullValue());
51
- assertThat(record.getDateFieldValue("TIMESTAMP|DATE|JST"), nullValue());
52
- assertThat(record.getDateFieldValue("TIMESTAMP|DATE|PST"), nullValue());
53
- assertThat(record.getDateTimeFieldValue("TIMESTAMP"), nullValue());
54
- assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is(""));
55
- assertThat(record.getMultiLineTextFieldValue("JSON"), is(""));
89
+ assertThat(record.getSubtableFieldValue("STRING|SUBTABLE"), is(list()));
90
+ assertThat(
91
+ record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"),
92
+ is("1970-01-01T00:00:00Z"));
93
+ assertThat(record.getNumberFieldValue("TIMESTAMP|NUMBER"), is(number("0")));
94
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE"), is(date("1970-01-01")));
95
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE|JST"), is(date("1970-01-01")));
96
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE|PST"), is(date("1969-12-31")));
97
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME"), is(time("00:00:00")));
98
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|JST"), is(time("09:00:00")));
99
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|PST"), is(time("16:00:00")));
100
+ assertThat(
101
+ record.getDateTimeFieldValue("TIMESTAMP"), is(dateTime("1970-01-01T00:00:00Z")));
102
+ assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is("\"\""));
103
+ assertThat(record.getMultiLineTextFieldValue("JSON"), is("\"\""));
104
+ assertThat(record.getSubtableFieldValue("JSON|SUBTABLE"), is(list()));
105
+ assertThat(
106
+ record.getSingleLineTextFieldValue("JSON|SUBTABLE.SINGLE_LINE_TEXT"), is("\"\""));
56
107
  assertThat(updateKey.getField(), is("STRING|SINGLE_LINE_TEXT"));
57
108
  assertThat(updateKey.getValue(), is(""));
58
109
  });
59
110
  verifier.verify(
60
111
  (record, updateKey) -> {
61
112
  assertThat(record.getSingleLineTextFieldValue("BOOLEAN|SINGLE_LINE_TEXT"), is("false"));
62
- assertThat(record.getNumberFieldValue("BOOLEAN"), nullValue());
113
+ assertThat(record.getNumberFieldValue("BOOLEAN"), is(number("0")));
63
114
  assertThat(record.getSingleLineTextFieldValue("LONG|SINGLE_LINE_TEXT"), is("0"));
64
115
  assertThat(record.getNumberFieldValue("LONG"), is(number("0")));
116
+ assertThat(record.getDateFieldValue("LONG|DATE"), is(date("1970-01-01")));
117
+ assertThat(record.getDateFieldValue("LONG|DATE|JST"), is(date("1970-01-01")));
118
+ assertThat(record.getDateFieldValue("LONG|DATE|PST"), is(date("1969-12-31")));
119
+ assertThat(record.getTimeFieldValue("LONG|TIME"), is(time("00:00:00")));
120
+ assertThat(record.getTimeFieldValue("LONG|TIME|JST"), is(time("09:00:00")));
121
+ assertThat(record.getTimeFieldValue("LONG|TIME|PST"), is(time("16:00:00")));
122
+ assertThat(
123
+ record.getDateTimeFieldValue("LONG|DATETIME"), is(dateTime("1970-01-01T00:00:00Z")));
65
124
  assertThat(record.getSingleLineTextFieldValue("DOUBLE|SINGLE_LINE_TEXT"), is("0.0"));
66
125
  assertThat(record.getNumberFieldValue("DOUBLE"), is(number("0.0")));
126
+ assertThat(record.getDateFieldValue("DOUBLE|DATE"), is(date("1970-01-01")));
127
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|JST"), is(date("1970-01-01")));
128
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|PST"), is(date("1969-12-31")));
129
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME"), is(time("00:00:00")));
130
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|JST"), is(time("09:00:00")));
131
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|PST"), is(time("16:00:00")));
132
+ assertThat(
133
+ record.getDateTimeFieldValue("DOUBLE|DATETIME"),
134
+ is(dateTime("1970-01-01T00:00:00Z")));
67
135
  assertThat(record.getSingleLineTextFieldValue("STRING|SINGLE_LINE_TEXT"), is(""));
68
136
  assertThat(record.getMultiLineTextFieldValue("STRING"), is(""));
69
- assertThat(record.getNumberFieldValue("STRING|NUMBER"), nullValue());
137
+ assertThat(record.getRichTextFieldValue("STRING|RICH_TEXT"), is(""));
138
+ assertThat(record.getNumberFieldValue("STRING|NUMBER"), is(number("0")));
70
139
  assertThat(record.getCheckBoxFieldValue("STRING|CHECK_BOX"), is(list()));
140
+ assertThat(record.getRadioButtonFieldValue("STRING|RADIO_BUTTON"), is(""));
141
+ assertThat(record.getMultiSelectFieldValue("STRING|MULTI_SELECT"), is(list()));
71
142
  assertThat(record.getDropDownFieldValue("STRING|DROP_DOWN"), is(""));
143
+ assertThat(record.getDateFieldValue("STRING|DATE"), is(date("1970-01-01")));
144
+ assertThat(record.getDateFieldValue("STRING|DATE|JST"), is(date("1970-01-01")));
145
+ assertThat(record.getDateFieldValue("STRING|DATE|PST"), is(date("1969-12-31")));
146
+ assertThat(record.getTimeFieldValue("STRING|TIME"), is(time("00:00:00")));
147
+ assertThat(record.getTimeFieldValue("STRING|TIME|JST"), is(time("09:00:00")));
148
+ assertThat(record.getTimeFieldValue("STRING|TIME|PST"), is(time("16:00:00")));
149
+ assertThat(
150
+ record.getDateTimeFieldValue("STRING|DATETIME"),
151
+ is(dateTime("1970-01-01T00:00:00Z")));
72
152
  assertThat(record.getLinkFieldValue("STRING|LINK"), is(""));
73
- assertThat(record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"), nullValue());
153
+ assertThat(record.getSubtableFieldValue("STRING|SUBTABLE"), is(list()));
154
+ assertThat(
155
+ record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"),
156
+ is("1970-01-01T00:00:00Z"));
157
+ assertThat(record.getNumberFieldValue("TIMESTAMP|NUMBER"), is(number("0")));
74
158
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE"), is(date("1970-01-01")));
75
159
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE|JST"), is(date("1970-01-01")));
76
160
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE|PST"), is(date("1969-12-31")));
161
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME"), is(time("00:00:00")));
162
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|JST"), is(time("09:00:00")));
163
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|PST"), is(time("16:00:00")));
77
164
  assertThat(
78
165
  record.getDateTimeFieldValue("TIMESTAMP"), is(dateTime("1970-01-01T00:00:00Z")));
79
- assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is(""));
80
- assertThat(record.getMultiLineTextFieldValue("JSON"), is(""));
166
+ assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is("\"\""));
167
+ assertThat(record.getMultiLineTextFieldValue("JSON"), is("\"\""));
168
+ assertThat(record.getSubtableFieldValue("JSON|SUBTABLE"), is(list()));
169
+ assertThat(
170
+ record.getSingleLineTextFieldValue("JSON|SUBTABLE.SINGLE_LINE_TEXT"), is("\"\""));
81
171
  assertThat(updateKey.getField(), is("STRING|SINGLE_LINE_TEXT"));
82
172
  assertThat(updateKey.getValue(), is(""));
83
173
  });
84
174
  verifier.verify(
85
175
  (record, updateKey) -> {
86
176
  assertThat(record.getSingleLineTextFieldValue("BOOLEAN|SINGLE_LINE_TEXT"), is("true"));
87
- assertThat(record.getNumberFieldValue("BOOLEAN"), nullValue());
177
+ assertThat(record.getNumberFieldValue("BOOLEAN"), is(number("1")));
88
178
  assertThat(record.getSingleLineTextFieldValue("LONG|SINGLE_LINE_TEXT"), is("123"));
89
179
  assertThat(record.getNumberFieldValue("LONG"), is(number("123")));
180
+ assertThat(record.getDateFieldValue("LONG|DATE"), is(date("1999-12-31")));
181
+ assertThat(record.getDateFieldValue("LONG|DATE|JST"), is(date("2000-01-01")));
182
+ assertThat(record.getDateFieldValue("LONG|DATE|PST"), is(date("1999-12-31")));
183
+ assertThat(record.getTimeFieldValue("LONG|TIME"), is(time("23:59:59")));
184
+ assertThat(record.getTimeFieldValue("LONG|TIME|JST"), is(time("08:59:59")));
185
+ assertThat(record.getTimeFieldValue("LONG|TIME|PST"), is(time("15:59:59")));
186
+ assertThat(
187
+ record.getDateTimeFieldValue("LONG|DATETIME"), is(dateTime("1999-12-31T23:59:59Z")));
90
188
  assertThat(record.getSingleLineTextFieldValue("DOUBLE|SINGLE_LINE_TEXT"), is("123.0"));
91
189
  assertThat(record.getNumberFieldValue("DOUBLE"), is(number("123.0")));
190
+ assertThat(record.getDateFieldValue("DOUBLE|DATE"), is(date("1999-12-31")));
191
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|JST"), is(date("2000-01-01")));
192
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|PST"), is(date("1999-12-31")));
193
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME"), is(time("23:59:59")));
194
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|JST"), is(time("08:59:59")));
195
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|PST"), is(time("15:59:59")));
196
+ assertThat(
197
+ record.getDateTimeFieldValue("DOUBLE|DATETIME"),
198
+ is(dateTime("1999-12-31T23:59:59Z")));
92
199
  assertThat(record.getSingleLineTextFieldValue("STRING|SINGLE_LINE_TEXT"), is("abc"));
93
200
  assertThat(record.getMultiLineTextFieldValue("STRING"), is("abc"));
201
+ assertThat(record.getRichTextFieldValue("STRING|RICH_TEXT"), is("abc"));
94
202
  assertThat(record.getNumberFieldValue("STRING|NUMBER"), is(number("123")));
95
203
  assertThat(record.getCheckBoxFieldValue("STRING|CHECK_BOX"), is(list("123", "abc")));
204
+ assertThat(record.getRadioButtonFieldValue("STRING|RADIO_BUTTON"), is("abc"));
205
+ assertThat(
206
+ record.getMultiSelectFieldValue("STRING|MULTI_SELECT"), is(list("123", "abc")));
96
207
  assertThat(record.getDropDownFieldValue("STRING|DROP_DOWN"), is("abc"));
208
+ assertThat(record.getDateFieldValue("STRING|DATE"), is(date("1999-12-31")));
209
+ assertThat(record.getDateFieldValue("STRING|DATE|JST"), is(date("1999-12-31")));
210
+ assertThat(record.getDateFieldValue("STRING|DATE|PST"), is(date("1999-12-30")));
211
+ assertThat(record.getTimeFieldValue("STRING|TIME"), is(time("23:59:59")));
212
+ assertThat(record.getTimeFieldValue("STRING|TIME|JST"), is(time("08:59:59")));
213
+ assertThat(record.getTimeFieldValue("STRING|TIME|PST"), is(time("15:59:59")));
214
+ assertThat(
215
+ record.getDateTimeFieldValue("STRING|DATETIME"),
216
+ is(dateTime("1999-12-31T23:59:59Z")));
97
217
  assertThat(record.getLinkFieldValue("STRING|LINK"), is("abc"));
98
- assertThat(record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"), nullValue());
218
+ assertTableRows(record.getSubtableFieldValue("STRING|SUBTABLE"), rows(0L, 1L, 2L));
219
+ assertThat(
220
+ record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"),
221
+ is("1999-12-31T23:59:59Z"));
222
+ assertThat(record.getNumberFieldValue("TIMESTAMP|NUMBER"), is(number("946684799")));
99
223
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE"), is(date("1999-12-31")));
100
224
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE|JST"), is(date("2000-01-01")));
101
225
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE|PST"), is(date("1999-12-31")));
226
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME"), is(time("23:59:59")));
227
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|JST"), is(time("08:59:59")));
228
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|PST"), is(time("15:59:59")));
102
229
  assertThat(
103
230
  record.getDateTimeFieldValue("TIMESTAMP"), is(dateTime("1999-12-31T23:59:59Z")));
104
- assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is("abc"));
105
- assertThat(record.getMultiLineTextFieldValue("JSON"), is("abc"));
231
+ assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is("\"abc\""));
232
+ assertThat(record.getMultiLineTextFieldValue("JSON"), is("\"abc\""));
233
+ assertTableRows(record.getSubtableFieldValue("JSON|SUBTABLE"), rows(0L, 1L, 2L));
234
+ assertThat(
235
+ record.getSingleLineTextFieldValue("JSON|SUBTABLE.SINGLE_LINE_TEXT"), is("\"abc\""));
106
236
  assertThat(updateKey.getField(), is("STRING|SINGLE_LINE_TEXT"));
107
237
  assertThat(updateKey.getValue(), is("abc"));
108
238
  });
109
239
  verifier.verify(
110
240
  (record, updateKey) -> {
111
241
  assertThat(record.getSingleLineTextFieldValue("BOOLEAN|SINGLE_LINE_TEXT"), is("false"));
112
- assertThat(record.getNumberFieldValue("BOOLEAN"), nullValue());
242
+ assertThat(record.getNumberFieldValue("BOOLEAN"), is(number("0")));
113
243
  assertThat(record.getSingleLineTextFieldValue("LONG|SINGLE_LINE_TEXT"), is("456"));
114
244
  assertThat(record.getNumberFieldValue("LONG"), is(number("456")));
245
+ assertThat(record.getDateFieldValue("LONG|DATE"), is(date("2000-01-01")));
246
+ assertThat(record.getDateFieldValue("LONG|DATE|JST"), is(date("2000-01-01")));
247
+ assertThat(record.getDateFieldValue("LONG|DATE|PST"), is(date("1999-12-31")));
248
+ assertThat(record.getTimeFieldValue("LONG|TIME"), is(time("00:00:00")));
249
+ assertThat(record.getTimeFieldValue("LONG|TIME|JST"), is(time("09:00:00")));
250
+ assertThat(record.getTimeFieldValue("LONG|TIME|PST"), is(time("16:00:00")));
251
+ assertThat(
252
+ record.getDateTimeFieldValue("LONG|DATETIME"), is(dateTime("2000-01-01T00:00:00Z")));
115
253
  assertThat(record.getSingleLineTextFieldValue("DOUBLE|SINGLE_LINE_TEXT"), is("456.0"));
116
254
  assertThat(record.getNumberFieldValue("DOUBLE"), is(number("456.0")));
255
+ assertThat(record.getDateFieldValue("DOUBLE|DATE"), is(date("2000-01-01")));
256
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|JST"), is(date("2000-01-01")));
257
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|PST"), is(date("1999-12-31")));
258
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME"), is(time("00:00:00")));
259
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|JST"), is(time("09:00:00")));
260
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|PST"), is(time("16:00:00")));
261
+ assertThat(
262
+ record.getDateTimeFieldValue("DOUBLE|DATETIME"),
263
+ is(dateTime("2000-01-01T00:00:00Z")));
117
264
  assertThat(record.getSingleLineTextFieldValue("STRING|SINGLE_LINE_TEXT"), is("def"));
118
265
  assertThat(record.getMultiLineTextFieldValue("STRING"), is("def"));
266
+ assertThat(record.getRichTextFieldValue("STRING|RICH_TEXT"), is("def"));
119
267
  assertThat(record.getNumberFieldValue("STRING|NUMBER"), is(number("456")));
120
268
  assertThat(record.getCheckBoxFieldValue("STRING|CHECK_BOX"), is(list("456", "def")));
269
+ assertThat(record.getRadioButtonFieldValue("STRING|RADIO_BUTTON"), is("def"));
270
+ assertThat(
271
+ record.getMultiSelectFieldValue("STRING|MULTI_SELECT"), is(list("456", "def")));
121
272
  assertThat(record.getDropDownFieldValue("STRING|DROP_DOWN"), is("def"));
273
+ assertThat(record.getDateFieldValue("STRING|DATE"), is(date("2000-01-01")));
274
+ assertThat(record.getDateFieldValue("STRING|DATE|JST"), is(date("2000-01-01")));
275
+ assertThat(record.getDateFieldValue("STRING|DATE|PST"), is(date("1999-12-31")));
276
+ assertThat(record.getTimeFieldValue("STRING|TIME"), is(time("00:00:00")));
277
+ assertThat(record.getTimeFieldValue("STRING|TIME|JST"), is(time("09:00:00")));
278
+ assertThat(record.getTimeFieldValue("STRING|TIME|PST"), is(time("16:00:00")));
279
+ assertThat(
280
+ record.getDateTimeFieldValue("STRING|DATETIME"),
281
+ is(dateTime("2000-01-01T00:00:00Z")));
122
282
  assertThat(record.getLinkFieldValue("STRING|LINK"), is("def"));
123
- assertThat(record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"), nullValue());
283
+ assertTableRows(record.getSubtableFieldValue("STRING|SUBTABLE"), rows(3L, 4L, 5L));
284
+ assertThat(
285
+ record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"),
286
+ is("2000-01-01T00:00:00Z"));
287
+ assertThat(record.getNumberFieldValue("TIMESTAMP|NUMBER"), is(number("946684800")));
124
288
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE"), is(date("2000-01-01")));
125
289
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE|JST"), is(date("2000-01-01")));
126
290
  assertThat(record.getDateFieldValue("TIMESTAMP|DATE|PST"), is(date("1999-12-31")));
291
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME"), is(time("00:00:00")));
292
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|JST"), is(time("09:00:00")));
293
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|PST"), is(time("16:00:00")));
127
294
  assertThat(
128
295
  record.getDateTimeFieldValue("TIMESTAMP"), is(dateTime("2000-01-01T00:00:00Z")));
129
- assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is("def"));
130
- assertThat(record.getMultiLineTextFieldValue("JSON"), is("def"));
296
+ assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is("\"def\""));
297
+ assertThat(record.getMultiLineTextFieldValue("JSON"), is("\"def\""));
298
+ assertTableRows(record.getSubtableFieldValue("JSON|SUBTABLE"), rows(3L, 4L, 5L));
299
+ assertThat(
300
+ record.getSingleLineTextFieldValue("JSON|SUBTABLE.SINGLE_LINE_TEXT"), is("\"def\""));
131
301
  assertThat(updateKey.getField(), is("STRING|SINGLE_LINE_TEXT"));
132
302
  assertThat(updateKey.getValue(), is("def"));
133
303
  });
134
304
  }
135
305
 
306
+ @Test
307
+ public void testPreferNulls() {
308
+ KintoneColumnVisitorVerifier verifier = verifier(null, "LONG", true, false);
309
+ verifier.verify(
310
+ (record, updateKey) -> {
311
+ assertThat(
312
+ record.getFieldType("BOOLEAN|SINGLE_LINE_TEXT"), is(FieldType.SINGLE_LINE_TEXT));
313
+ assertThat(record.getFieldType("BOOLEAN"), is(FieldType.NUMBER));
314
+ assertThat(record.getFieldType("LONG|SINGLE_LINE_TEXT"), is(FieldType.SINGLE_LINE_TEXT));
315
+ assertThat(record.getFieldType("LONG"), is(FieldType.NUMBER));
316
+ assertThat(record.getFieldType("LONG|DATE"), is(FieldType.DATE));
317
+ assertThat(record.getFieldType("LONG|DATE|JST"), is(FieldType.DATE));
318
+ assertThat(record.getFieldType("LONG|DATE|PST"), is(FieldType.DATE));
319
+ assertThat(record.getFieldType("LONG|TIME"), is(FieldType.TIME));
320
+ assertThat(record.getFieldType("LONG|TIME|JST"), is(FieldType.TIME));
321
+ assertThat(record.getFieldType("LONG|TIME|PST"), is(FieldType.TIME));
322
+ assertThat(record.getFieldType("LONG|DATETIME"), is(FieldType.DATETIME));
323
+ assertThat(
324
+ record.getFieldType("DOUBLE|SINGLE_LINE_TEXT"), is(FieldType.SINGLE_LINE_TEXT));
325
+ assertThat(record.getFieldType("DOUBLE"), is(FieldType.NUMBER));
326
+ assertThat(record.getFieldType("DOUBLE|DATE"), is(FieldType.DATE));
327
+ assertThat(record.getFieldType("DOUBLE|DATE|JST"), is(FieldType.DATE));
328
+ assertThat(record.getFieldType("DOUBLE|DATE|PST"), is(FieldType.DATE));
329
+ assertThat(record.getFieldType("DOUBLE|TIME"), is(FieldType.TIME));
330
+ assertThat(record.getFieldType("DOUBLE|TIME|JST"), is(FieldType.TIME));
331
+ assertThat(record.getFieldType("DOUBLE|TIME|PST"), is(FieldType.TIME));
332
+ assertThat(record.getFieldType("DOUBLE|DATETIME"), is(FieldType.DATETIME));
333
+ assertThat(
334
+ record.getFieldType("STRING|SINGLE_LINE_TEXT"), is(FieldType.SINGLE_LINE_TEXT));
335
+ assertThat(record.getFieldType("STRING"), is(FieldType.MULTI_LINE_TEXT));
336
+ assertThat(record.getFieldType("STRING|RICH_TEXT"), is(FieldType.RICH_TEXT));
337
+ assertThat(record.getFieldType("STRING|NUMBER"), is(FieldType.NUMBER));
338
+ assertThat(record.getFieldType("STRING|CHECK_BOX"), is(FieldType.CHECK_BOX));
339
+ assertThat(record.getFieldType("STRING|RADIO_BUTTON"), is(FieldType.RADIO_BUTTON));
340
+ assertThat(record.getFieldType("STRING|MULTI_SELECT"), is(FieldType.MULTI_SELECT));
341
+ assertThat(record.getFieldType("STRING|DROP_DOWN"), is(FieldType.DROP_DOWN));
342
+ assertThat(record.getFieldType("STRING|DATE"), is(FieldType.DATE));
343
+ assertThat(record.getFieldType("STRING|DATE|JST"), is(FieldType.DATE));
344
+ assertThat(record.getFieldType("STRING|DATE|PST"), is(FieldType.DATE));
345
+ assertThat(record.getFieldType("STRING|TIME"), is(FieldType.TIME));
346
+ assertThat(record.getFieldType("STRING|TIME|JST"), is(FieldType.TIME));
347
+ assertThat(record.getFieldType("STRING|TIME|PST"), is(FieldType.TIME));
348
+ assertThat(record.getFieldType("STRING|DATETIME"), is(FieldType.DATETIME));
349
+ assertThat(record.getFieldType("STRING|LINK"), is(FieldType.LINK));
350
+ assertThat(record.getFieldType("STRING|SUBTABLE"), is(FieldType.SUBTABLE));
351
+ assertThat(
352
+ record.getFieldType("TIMESTAMP|SINGLE_LINE_TEXT"), is(FieldType.SINGLE_LINE_TEXT));
353
+ assertThat(record.getFieldType("TIMESTAMP|NUMBER"), is(FieldType.NUMBER));
354
+ assertThat(record.getFieldType("TIMESTAMP|DATE"), is(FieldType.DATE));
355
+ assertThat(record.getFieldType("TIMESTAMP|DATE|JST"), is(FieldType.DATE));
356
+ assertThat(record.getFieldType("TIMESTAMP|DATE|PST"), is(FieldType.DATE));
357
+ assertThat(record.getFieldType("TIMESTAMP|TIME"), is(FieldType.TIME));
358
+ assertThat(record.getFieldType("TIMESTAMP|TIME|JST"), is(FieldType.TIME));
359
+ assertThat(record.getFieldType("TIMESTAMP|TIME|PST"), is(FieldType.TIME));
360
+ assertThat(record.getFieldType("TIMESTAMP"), is(FieldType.DATETIME));
361
+ assertThat(record.getFieldType("JSON|SINGLE_LINE_TEXT"), is(FieldType.SINGLE_LINE_TEXT));
362
+ assertThat(record.getFieldType("JSON"), is(FieldType.MULTI_LINE_TEXT));
363
+ assertThat(record.getFieldType("JSON|SUBTABLE"), is(FieldType.SUBTABLE));
364
+ assertThat(
365
+ record.getFieldType("JSON|SUBTABLE.SINGLE_LINE_TEXT"),
366
+ is(FieldType.SINGLE_LINE_TEXT));
367
+ assertThat(record.getSingleLineTextFieldValue("BOOLEAN|SINGLE_LINE_TEXT"), nullValue());
368
+ assertThat(record.getNumberFieldValue("BOOLEAN"), nullValue());
369
+ assertThat(record.getSingleLineTextFieldValue("LONG|SINGLE_LINE_TEXT"), nullValue());
370
+ assertThat(record.getNumberFieldValue("LONG"), nullValue());
371
+ assertThat(record.getDateFieldValue("LONG|DATE"), nullValue());
372
+ assertThat(record.getDateFieldValue("LONG|DATE|JST"), nullValue());
373
+ assertThat(record.getDateFieldValue("LONG|DATE|PST"), nullValue());
374
+ assertThat(record.getTimeFieldValue("LONG|TIME"), nullValue());
375
+ assertThat(record.getTimeFieldValue("LONG|TIME|JST"), nullValue());
376
+ assertThat(record.getTimeFieldValue("LONG|TIME|PST"), nullValue());
377
+ assertThat(record.getDateTimeFieldValue("LONG|DATETIME"), nullValue());
378
+ assertThat(record.getSingleLineTextFieldValue("DOUBLE|SINGLE_LINE_TEXT"), nullValue());
379
+ assertThat(record.getNumberFieldValue("DOUBLE"), nullValue());
380
+ assertThat(record.getDateFieldValue("DOUBLE|DATE"), nullValue());
381
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|JST"), nullValue());
382
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|PST"), nullValue());
383
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME"), nullValue());
384
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|JST"), nullValue());
385
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|PST"), nullValue());
386
+ assertThat(record.getDateTimeFieldValue("DOUBLE|DATETIME"), nullValue());
387
+ assertThat(record.getSingleLineTextFieldValue("STRING|SINGLE_LINE_TEXT"), nullValue());
388
+ assertThat(record.getMultiLineTextFieldValue("STRING"), nullValue());
389
+ assertThat(record.getRichTextFieldValue("STRING|RICH_TEXT"), nullValue());
390
+ assertThat(record.getNumberFieldValue("STRING|NUMBER"), nullValue());
391
+ assertThat(record.getCheckBoxFieldValue("STRING|CHECK_BOX"), is(list()));
392
+ assertThat(record.getRadioButtonFieldValue("STRING|RADIO_BUTTON"), nullValue());
393
+ assertThat(record.getMultiSelectFieldValue("STRING|MULTI_SELECT"), is(list()));
394
+ assertThat(record.getDropDownFieldValue("STRING|DROP_DOWN"), nullValue());
395
+ assertThat(record.getDateFieldValue("STRING|DATE"), nullValue());
396
+ assertThat(record.getDateFieldValue("STRING|DATE|JST"), nullValue());
397
+ assertThat(record.getDateFieldValue("STRING|DATE|PST"), nullValue());
398
+ assertThat(record.getTimeFieldValue("STRING|TIME"), nullValue());
399
+ assertThat(record.getTimeFieldValue("STRING|TIME|JST"), nullValue());
400
+ assertThat(record.getTimeFieldValue("STRING|TIME|PST"), nullValue());
401
+ assertThat(record.getDateTimeFieldValue("STRING|DATETIME"), nullValue());
402
+ assertThat(record.getLinkFieldValue("STRING|LINK"), nullValue());
403
+ assertThat(record.getSubtableFieldValue("STRING|SUBTABLE"), is(list()));
404
+ assertThat(record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"), nullValue());
405
+ assertThat(record.getNumberFieldValue("TIMESTAMP|NUMBER"), nullValue());
406
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE"), nullValue());
407
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE|JST"), nullValue());
408
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE|PST"), nullValue());
409
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME"), nullValue());
410
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|JST"), nullValue());
411
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|PST"), nullValue());
412
+ assertThat(record.getDateTimeFieldValue("TIMESTAMP"), nullValue());
413
+ assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), nullValue());
414
+ assertThat(record.getMultiLineTextFieldValue("JSON"), nullValue());
415
+ assertThat(record.getSubtableFieldValue("JSON|SUBTABLE"), is(list()));
416
+ assertThat(
417
+ record.getSingleLineTextFieldValue("JSON|SUBTABLE.SINGLE_LINE_TEXT"), nullValue());
418
+ assertThat(updateKey.getField(), is("LONG"));
419
+ assertThat(updateKey.getValue(), nullValue());
420
+ });
421
+ }
422
+
423
+ @Test
424
+ public void testIgnoreNulls() {
425
+ KintoneColumnVisitorVerifier verifier = verifier("JSON", "JSON", false, true);
426
+ verifier.verify(
427
+ (record, updateKey) -> {
428
+ assertThat(record.getFieldValue("BOOLEAN|SINGLE_LINE_TEXT"), nullValue());
429
+ assertThat(record.getFieldValue("BOOLEAN"), nullValue());
430
+ assertThat(record.getFieldValue("LONG|SINGLE_LINE_TEXT"), nullValue());
431
+ assertThat(record.getFieldValue("LONG"), nullValue());
432
+ assertThat(record.getFieldValue("LONG|DATE"), nullValue());
433
+ assertThat(record.getFieldValue("LONG|DATE|JST"), nullValue());
434
+ assertThat(record.getFieldValue("LONG|DATE|PST"), nullValue());
435
+ assertThat(record.getFieldValue("LONG|TIME"), nullValue());
436
+ assertThat(record.getFieldValue("LONG|TIME|JST"), nullValue());
437
+ assertThat(record.getFieldValue("LONG|TIME|PST"), nullValue());
438
+ assertThat(record.getFieldValue("LONG|DATETIME"), nullValue());
439
+ assertThat(record.getFieldValue("DOUBLE|SINGLE_LINE_TEXT"), nullValue());
440
+ assertThat(record.getFieldValue("DOUBLE"), nullValue());
441
+ assertThat(record.getFieldValue("DOUBLE|DATE"), nullValue());
442
+ assertThat(record.getFieldValue("DOUBLE|DATE|JST"), nullValue());
443
+ assertThat(record.getFieldValue("DOUBLE|DATE|PST"), nullValue());
444
+ assertThat(record.getFieldValue("DOUBLE|TIME"), nullValue());
445
+ assertThat(record.getFieldValue("DOUBLE|TIME|JST"), nullValue());
446
+ assertThat(record.getFieldValue("DOUBLE|TIME|PST"), nullValue());
447
+ assertThat(record.getFieldValue("DOUBLE|DATETIME"), nullValue());
448
+ assertThat(record.getFieldValue("STRING|SINGLE_LINE_TEXT"), nullValue());
449
+ assertThat(record.getFieldValue("STRING"), nullValue());
450
+ assertThat(record.getFieldValue("STRING|RICH_TEXT"), nullValue());
451
+ assertThat(record.getFieldValue("STRING|NUMBER"), nullValue());
452
+ assertThat(record.getFieldValue("STRING|CHECK_BOX"), nullValue());
453
+ assertThat(record.getFieldValue("STRING|RADIO_BUTTON"), nullValue());
454
+ assertThat(record.getFieldValue("STRING|MULTI_SELECT"), nullValue());
455
+ assertThat(record.getFieldValue("STRING|DROP_DOWN"), nullValue());
456
+ assertThat(record.getFieldValue("STRING|DATE"), nullValue());
457
+ assertThat(record.getFieldValue("STRING|DATE|JST"), nullValue());
458
+ assertThat(record.getFieldValue("STRING|DATE|PST"), nullValue());
459
+ assertThat(record.getFieldValue("STRING|TIME"), nullValue());
460
+ assertThat(record.getFieldValue("STRING|TIME|JST"), nullValue());
461
+ assertThat(record.getFieldValue("STRING|TIME|PST"), nullValue());
462
+ assertThat(record.getFieldValue("STRING|DATETIME"), nullValue());
463
+ assertThat(record.getFieldValue("STRING|LINK"), nullValue());
464
+ assertThat(record.getFieldValue("STRING|SUBTABLE"), nullValue());
465
+ assertThat(record.getFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"), nullValue());
466
+ assertThat(record.getFieldValue("TIMESTAMP|NUMBER"), nullValue());
467
+ assertThat(record.getFieldValue("TIMESTAMP|DATE"), nullValue());
468
+ assertThat(record.getFieldValue("TIMESTAMP|DATE|JST"), nullValue());
469
+ assertThat(record.getFieldValue("TIMESTAMP|DATE|PST"), nullValue());
470
+ assertThat(record.getFieldValue("TIMESTAMP|TIME"), nullValue());
471
+ assertThat(record.getFieldValue("TIMESTAMP|TIME|JST"), nullValue());
472
+ assertThat(record.getFieldValue("TIMESTAMP|TIME|PST"), nullValue());
473
+ assertThat(record.getFieldValue("TIMESTAMP"), nullValue());
474
+ assertThat(record.getFieldValue("JSON|SINGLE_LINE_TEXT"), nullValue());
475
+ assertThat(record.getFieldValue("JSON"), nullValue());
476
+ assertThat(record.getFieldValue("JSON|SUBTABLE"), nullValue());
477
+ assertThat(record.getFieldValue("JSON|SUBTABLE.SINGLE_LINE_TEXT"), nullValue());
478
+ assertThat(updateKey.getField(), nullValue());
479
+ assertThat(updateKey.getValue(), nullValue());
480
+ },
481
+ true);
482
+ }
483
+
484
+ @Test
485
+ public void testReduceKey() {
486
+ KintoneColumnVisitorVerifier verifier = verifier("JSON|SUBTABLE", null);
487
+ verifier.verify(
488
+ (record, updateKey) -> {
489
+ assertThat(record.getSingleLineTextFieldValue("BOOLEAN|SINGLE_LINE_TEXT"), is("false"));
490
+ assertThat(record.getNumberFieldValue("BOOLEAN"), is(number("0")));
491
+ assertThat(record.getSingleLineTextFieldValue("LONG|SINGLE_LINE_TEXT"), is("0"));
492
+ assertThat(record.getNumberFieldValue("LONG"), is(number("0")));
493
+ assertThat(record.getDateFieldValue("LONG|DATE"), is(date("1970-01-01")));
494
+ assertThat(record.getDateFieldValue("LONG|DATE|JST"), is(date("1970-01-01")));
495
+ assertThat(record.getDateFieldValue("LONG|DATE|PST"), is(date("1969-12-31")));
496
+ assertThat(record.getTimeFieldValue("LONG|TIME"), is(time("00:00:00")));
497
+ assertThat(record.getTimeFieldValue("LONG|TIME|JST"), is(time("09:00:00")));
498
+ assertThat(record.getTimeFieldValue("LONG|TIME|PST"), is(time("16:00:00")));
499
+ assertThat(
500
+ record.getDateTimeFieldValue("LONG|DATETIME"), is(dateTime("1970-01-01T00:00:00Z")));
501
+ assertThat(record.getSingleLineTextFieldValue("DOUBLE|SINGLE_LINE_TEXT"), is("0.0"));
502
+ assertThat(record.getNumberFieldValue("DOUBLE"), is(number("0.0")));
503
+ assertThat(record.getDateFieldValue("DOUBLE|DATE"), is(date("1970-01-01")));
504
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|JST"), is(date("1970-01-01")));
505
+ assertThat(record.getDateFieldValue("DOUBLE|DATE|PST"), is(date("1969-12-31")));
506
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME"), is(time("00:00:00")));
507
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|JST"), is(time("09:00:00")));
508
+ assertThat(record.getTimeFieldValue("DOUBLE|TIME|PST"), is(time("16:00:00")));
509
+ assertThat(
510
+ record.getDateTimeFieldValue("DOUBLE|DATETIME"),
511
+ is(dateTime("1970-01-01T00:00:00Z")));
512
+ assertThat(record.getSingleLineTextFieldValue("STRING|SINGLE_LINE_TEXT"), is(""));
513
+ assertThat(record.getMultiLineTextFieldValue("STRING"), is(""));
514
+ assertThat(record.getRichTextFieldValue("STRING|RICH_TEXT"), is(""));
515
+ assertThat(record.getNumberFieldValue("STRING|NUMBER"), is(number("0")));
516
+ assertThat(record.getCheckBoxFieldValue("STRING|CHECK_BOX"), is(list()));
517
+ assertThat(record.getRadioButtonFieldValue("STRING|RADIO_BUTTON"), is(""));
518
+ assertThat(record.getMultiSelectFieldValue("STRING|MULTI_SELECT"), is(list()));
519
+ assertThat(record.getDropDownFieldValue("STRING|DROP_DOWN"), is(""));
520
+ assertThat(record.getDateFieldValue("STRING|DATE"), is(date("1970-01-01")));
521
+ assertThat(record.getDateFieldValue("STRING|DATE|JST"), is(date("1970-01-01")));
522
+ assertThat(record.getDateFieldValue("STRING|DATE|PST"), is(date("1969-12-31")));
523
+ assertThat(record.getTimeFieldValue("STRING|TIME"), is(time("00:00:00")));
524
+ assertThat(record.getTimeFieldValue("STRING|TIME|JST"), is(time("09:00:00")));
525
+ assertThat(record.getTimeFieldValue("STRING|TIME|PST"), is(time("16:00:00")));
526
+ assertThat(
527
+ record.getDateTimeFieldValue("STRING|DATETIME"),
528
+ is(dateTime("1970-01-01T00:00:00Z")));
529
+ assertThat(record.getLinkFieldValue("STRING|LINK"), is(""));
530
+ assertThat(record.getSubtableFieldValue("STRING|SUBTABLE"), is(list()));
531
+ assertThat(
532
+ record.getSingleLineTextFieldValue("TIMESTAMP|SINGLE_LINE_TEXT"),
533
+ is("1970-01-01T00:00:00Z"));
534
+ assertThat(record.getNumberFieldValue("TIMESTAMP|NUMBER"), is(number("0")));
535
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE"), is(date("1970-01-01")));
536
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE|JST"), is(date("1970-01-01")));
537
+ assertThat(record.getDateFieldValue("TIMESTAMP|DATE|PST"), is(date("1969-12-31")));
538
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME"), is(time("00:00:00")));
539
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|JST"), is(time("09:00:00")));
540
+ assertThat(record.getTimeFieldValue("TIMESTAMP|TIME|PST"), is(time("16:00:00")));
541
+ assertThat(
542
+ record.getDateTimeFieldValue("TIMESTAMP"), is(dateTime("1970-01-01T00:00:00Z")));
543
+ assertThat(record.getSingleLineTextFieldValue("JSON|SINGLE_LINE_TEXT"), is("\"\""));
544
+ assertThat(record.getMultiLineTextFieldValue("JSON"), is("\"\""));
545
+ assertThat(record.getSubtableFieldValue("JSON|SUBTABLE"), is(list()));
546
+ assertThat(record.getFieldValue("JSON|SUBTABLE.SINGLE_LINE_TEXT"), nullValue());
547
+ assertThat(updateKey.getField(), nullValue());
548
+ assertThat(updateKey.getValue(), nullValue());
549
+ },
550
+ true);
551
+ }
552
+
553
+ @Test
554
+ public void testUpdateKey() {
555
+ assertThrows(UnsupportedOperationException.class, () -> verifier(null, "TIMESTAMP").verify());
556
+ KintoneColumnVisitorVerifier verifier = verifier(null, "TIMESTAMP|NUMBER");
557
+ verifier.verify(
558
+ (record, updateKey) -> {
559
+ assertThat(updateKey.getField(), is("TIMESTAMP|NUMBER"));
560
+ assertThat(updateKey.getValue(), is(number("0")));
561
+ });
562
+ verifier.verify(
563
+ (record, updateKey) -> {
564
+ assertThat(updateKey.getField(), is("TIMESTAMP|NUMBER"));
565
+ assertThat(updateKey.getValue(), is(number("0")));
566
+ });
567
+ verifier.verify(
568
+ (record, updateKey) -> {
569
+ assertThat(updateKey.getField(), is("TIMESTAMP|NUMBER"));
570
+ assertThat(updateKey.getValue(), is(number("946684799")));
571
+ });
572
+ verifier.verify(
573
+ (record, updateKey) -> {
574
+ assertThat(updateKey.getField(), is("TIMESTAMP|NUMBER"));
575
+ assertThat(updateKey.getValue(), is(number("946684800")));
576
+ });
577
+ }
578
+
579
+ private static KintoneColumnVisitorVerifier verifier(String reduceKeyName, String updateKeyName) {
580
+ Schema schema = build(Schema.builder());
581
+ return new KintoneColumnVisitorVerifier(
582
+ schema,
583
+ Collections.emptySet(),
584
+ build(ImmutableMap.builder()),
585
+ reduceKeyName,
586
+ updateKeyName,
587
+ OutputPageBuilder.build(schema, KintoneColumnVisitorTest::build));
588
+ }
589
+
590
+ private static KintoneColumnVisitorVerifier verifier(
591
+ String reduceKeyName, String updateKeyName, boolean preferNulls, boolean ignoreNulls) {
592
+ Schema schema = build(Schema.builder());
593
+ return new KintoneColumnVisitorVerifier(
594
+ schema,
595
+ Collections.emptySet(),
596
+ build(ImmutableMap.builder()),
597
+ preferNulls,
598
+ ignoreNulls,
599
+ reduceKeyName,
600
+ updateKeyName,
601
+ OutputPageBuilder.build(schema, KintoneColumnVisitorTest::build));
602
+ }
603
+
136
604
  private static Schema build(Schema.Builder builder) {
137
605
  return builder
138
606
  .add("BOOLEAN|SINGLE_LINE_TEXT", Types.BOOLEAN)
139
- // java.lang.NumberFormatException at java.math.BigDecimal.<init>
140
- // .add("BOOLEAN", Types.BOOLEAN)
607
+ .add("BOOLEAN", Types.BOOLEAN)
141
608
  .add("LONG|SINGLE_LINE_TEXT", Types.LONG)
142
609
  .add("LONG", Types.LONG)
610
+ .add("LONG|DATE", Types.LONG)
611
+ .add("LONG|DATE|JST", Types.LONG)
612
+ .add("LONG|DATE|PST", Types.LONG)
613
+ .add("LONG|TIME", Types.LONG)
614
+ .add("LONG|TIME|JST", Types.LONG)
615
+ .add("LONG|TIME|PST", Types.LONG)
616
+ .add("LONG|DATETIME", Types.LONG)
143
617
  .add("DOUBLE|SINGLE_LINE_TEXT", Types.DOUBLE)
144
618
  .add("DOUBLE", Types.DOUBLE)
619
+ .add("DOUBLE|DATE", Types.DOUBLE)
620
+ .add("DOUBLE|DATE|JST", Types.DOUBLE)
621
+ .add("DOUBLE|DATE|PST", Types.DOUBLE)
622
+ .add("DOUBLE|TIME", Types.DOUBLE)
623
+ .add("DOUBLE|TIME|JST", Types.DOUBLE)
624
+ .add("DOUBLE|TIME|PST", Types.DOUBLE)
625
+ .add("DOUBLE|DATETIME", Types.DOUBLE)
145
626
  .add("STRING|SINGLE_LINE_TEXT", Types.STRING)
146
627
  .add("STRING", Types.STRING)
628
+ .add("STRING|RICH_TEXT", Types.STRING)
147
629
  .add("STRING|NUMBER", Types.STRING)
148
630
  .add("STRING|CHECK_BOX", Types.STRING)
631
+ .add("STRING|RADIO_BUTTON", Types.STRING)
632
+ .add("STRING|MULTI_SELECT", Types.STRING)
149
633
  .add("STRING|DROP_DOWN", Types.STRING)
634
+ .add("STRING|DATE", Types.STRING)
635
+ .add("STRING|DATE|JST", Types.STRING)
636
+ .add("STRING|DATE|PST", Types.STRING)
637
+ .add("STRING|TIME", Types.STRING)
638
+ .add("STRING|TIME|JST", Types.STRING)
639
+ .add("STRING|TIME|PST", Types.STRING)
640
+ .add("STRING|DATETIME", Types.STRING)
150
641
  .add("STRING|LINK", Types.STRING)
642
+ .add("STRING|SUBTABLE", Types.STRING)
151
643
  .add("TIMESTAMP|SINGLE_LINE_TEXT", Types.TIMESTAMP)
644
+ .add("TIMESTAMP|NUMBER", Types.TIMESTAMP)
152
645
  .add("TIMESTAMP|DATE", Types.TIMESTAMP)
153
646
  .add("TIMESTAMP|DATE|JST", Types.TIMESTAMP)
154
647
  .add("TIMESTAMP|DATE|PST", Types.TIMESTAMP)
648
+ .add("TIMESTAMP|TIME", Types.TIMESTAMP)
649
+ .add("TIMESTAMP|TIME|JST", Types.TIMESTAMP)
650
+ .add("TIMESTAMP|TIME|PST", Types.TIMESTAMP)
155
651
  .add("TIMESTAMP", Types.TIMESTAMP)
156
652
  .add("JSON|SINGLE_LINE_TEXT", Types.JSON)
157
653
  .add("JSON", Types.JSON)
654
+ .add("JSON|SUBTABLE", Types.JSON)
655
+ .add("JSON|SUBTABLE.SINGLE_LINE_TEXT", Types.JSON)
158
656
  .build();
159
657
  }
160
658
 
@@ -165,21 +663,52 @@ public class KintoneColumnVisitorTest {
165
663
  .put(build("BOOLEAN", it -> it.setType("NUMBER")))
166
664
  .put(build("LONG|SINGLE_LINE_TEXT", it -> it.setType("SINGLE_LINE_TEXT")))
167
665
  .put(build("LONG", it -> it.setType("NUMBER")))
666
+ .put(build("LONG|DATE", it -> it.setType("DATE").setTimezone("UTC")))
667
+ .put(build("LONG|DATE|JST", it -> it.setType("DATE").setTimezone("Asia/Tokyo")))
668
+ .put(build("LONG|DATE|PST", it -> it.setType("DATE").setTimezone("US/Pacific")))
669
+ .put(build("LONG|TIME", it -> it.setType("TIME").setTimezone("UTC")))
670
+ .put(build("LONG|TIME|JST", it -> it.setType("TIME").setTimezone("Asia/Tokyo")))
671
+ .put(build("LONG|TIME|PST", it -> it.setType("TIME").setTimezone("US/Pacific")))
672
+ .put(build("LONG|DATETIME", it -> it.setType("DATETIME")))
168
673
  .put(build("DOUBLE|SINGLE_LINE_TEXT", it -> it.setType("SINGLE_LINE_TEXT")))
169
674
  .put(build("DOUBLE", it -> it.setType("NUMBER")))
675
+ .put(build("DOUBLE|DATE", it -> it.setType("DATE").setTimezone("UTC")))
676
+ .put(build("DOUBLE|DATE|JST", it -> it.setType("DATE").setTimezone("Asia/Tokyo")))
677
+ .put(build("DOUBLE|DATE|PST", it -> it.setType("DATE").setTimezone("US/Pacific")))
678
+ .put(build("DOUBLE|TIME", it -> it.setType("TIME").setTimezone("UTC")))
679
+ .put(build("DOUBLE|TIME|JST", it -> it.setType("TIME").setTimezone("Asia/Tokyo")))
680
+ .put(build("DOUBLE|TIME|PST", it -> it.setType("TIME").setTimezone("US/Pacific")))
681
+ .put(build("DOUBLE|DATETIME", it -> it.setType("DATETIME")))
170
682
  .put(build("STRING|SINGLE_LINE_TEXT", it -> it.setType("SINGLE_LINE_TEXT")))
171
683
  .put(build("STRING", it -> it.setType("MULTI_LINE_TEXT")))
684
+ .put(build("STRING|RICH_TEXT", it -> it.setType("RICH_TEXT")))
172
685
  .put(build("STRING|NUMBER", it -> it.setType("NUMBER")))
173
686
  .put(build("STRING|CHECK_BOX", it -> it.setType("CHECK_BOX").setValueSeparator(",")))
687
+ .put(build("STRING|RADIO_BUTTON", it -> it.setType("RADIO_BUTTON")))
688
+ .put(build("STRING|MULTI_SELECT", it -> it.setType("MULTI_SELECT").setValueSeparator(",")))
174
689
  .put(build("STRING|DROP_DOWN", it -> it.setType("DROP_DOWN")))
690
+ .put(build("STRING|DATE", it -> it.setType("DATE").setTimezone("UTC")))
691
+ .put(build("STRING|DATE|JST", it -> it.setType("DATE").setTimezone("Asia/Tokyo")))
692
+ .put(build("STRING|DATE|PST", it -> it.setType("DATE").setTimezone("US/Pacific")))
693
+ .put(build("STRING|TIME", it -> it.setType("TIME").setTimezone("UTC")))
694
+ .put(build("STRING|TIME|JST", it -> it.setType("TIME").setTimezone("Asia/Tokyo")))
695
+ .put(build("STRING|TIME|PST", it -> it.setType("TIME").setTimezone("US/Pacific")))
696
+ .put(build("STRING|DATETIME", it -> it.setType("DATETIME")))
175
697
  .put(build("STRING|LINK", it -> it.setType("LINK")))
698
+ .put(build("STRING|SUBTABLE", it -> it.setType("SUBTABLE")))
176
699
  .put(build("TIMESTAMP|SINGLE_LINE_TEXT", it -> it.setType("SINGLE_LINE_TEXT")))
700
+ .put(build("TIMESTAMP|NUMBER", it -> it.setType("NUMBER")))
177
701
  .put(build("TIMESTAMP|DATE", it -> it.setType("DATE").setTimezone("UTC")))
178
702
  .put(build("TIMESTAMP|DATE|JST", it -> it.setType("DATE").setTimezone("Asia/Tokyo")))
179
703
  .put(build("TIMESTAMP|DATE|PST", it -> it.setType("DATE").setTimezone("US/Pacific")))
704
+ .put(build("TIMESTAMP|TIME", it -> it.setType("TIME").setTimezone("UTC")))
705
+ .put(build("TIMESTAMP|TIME|JST", it -> it.setType("TIME").setTimezone("Asia/Tokyo")))
706
+ .put(build("TIMESTAMP|TIME|PST", it -> it.setType("TIME").setTimezone("US/Pacific")))
180
707
  .put(build("TIMESTAMP", it -> it.setType("DATETIME")))
181
708
  .put(build("JSON|SINGLE_LINE_TEXT", it -> it.setType("SINGLE_LINE_TEXT")))
182
709
  .put(build("JSON", it -> it.setType("MULTI_LINE_TEXT")))
710
+ .put(build("JSON|SUBTABLE", it -> it.setType("SUBTABLE")))
711
+ .put(build("JSON|SUBTABLE.SINGLE_LINE_TEXT", it -> it.setType("SINGLE_LINE_TEXT")))
183
712
  .build();
184
713
  }
185
714
 
@@ -192,106 +721,219 @@ public class KintoneColumnVisitorTest {
192
721
  private static Page build(OutputPageBuilder builder) {
193
722
  return builder
194
723
  .setNull("BOOLEAN|SINGLE_LINE_TEXT")
195
- // .setNull("BOOLEAN")
724
+ .setNull("BOOLEAN")
196
725
  .setNull("LONG|SINGLE_LINE_TEXT")
197
726
  .setNull("LONG")
727
+ .setNull("LONG|DATE")
728
+ .setNull("LONG|DATE|JST")
729
+ .setNull("LONG|DATE|PST")
730
+ .setNull("LONG|TIME")
731
+ .setNull("LONG|TIME|JST")
732
+ .setNull("LONG|TIME|PST")
733
+ .setNull("LONG|DATETIME")
198
734
  .setNull("DOUBLE|SINGLE_LINE_TEXT")
199
735
  .setNull("DOUBLE")
736
+ .setNull("DOUBLE|DATE")
737
+ .setNull("DOUBLE|DATE|JST")
738
+ .setNull("DOUBLE|DATE|PST")
739
+ .setNull("DOUBLE|TIME")
740
+ .setNull("DOUBLE|TIME|JST")
741
+ .setNull("DOUBLE|TIME|PST")
742
+ .setNull("DOUBLE|DATETIME")
200
743
  .setNull("STRING|SINGLE_LINE_TEXT")
201
744
  .setNull("STRING")
745
+ .setNull("STRING|RICH_TEXT")
202
746
  .setNull("STRING|NUMBER")
203
747
  .setNull("STRING|CHECK_BOX")
748
+ .setNull("STRING|RADIO_BUTTON")
749
+ .setNull("STRING|MULTI_SELECT")
204
750
  .setNull("STRING|DROP_DOWN")
751
+ .setNull("STRING|DATE")
752
+ .setNull("STRING|DATE|JST")
753
+ .setNull("STRING|DATE|PST")
754
+ .setNull("STRING|TIME")
755
+ .setNull("STRING|TIME|JST")
756
+ .setNull("STRING|TIME|PST")
757
+ .setNull("STRING|DATETIME")
205
758
  .setNull("STRING|LINK")
759
+ .setNull("STRING|SUBTABLE")
206
760
  .setNull("TIMESTAMP|SINGLE_LINE_TEXT")
761
+ .setNull("TIMESTAMP|NUMBER")
207
762
  .setNull("TIMESTAMP|DATE")
208
763
  .setNull("TIMESTAMP|DATE|JST")
209
764
  .setNull("TIMESTAMP|DATE|PST")
765
+ .setNull("TIMESTAMP|TIME")
766
+ .setNull("TIMESTAMP|TIME|JST")
767
+ .setNull("TIMESTAMP|TIME|PST")
210
768
  .setNull("TIMESTAMP")
211
769
  .setNull("JSON|SINGLE_LINE_TEXT")
212
770
  .setNull("JSON")
771
+ .setNull("JSON|SUBTABLE")
772
+ .setNull("JSON|SUBTABLE.SINGLE_LINE_TEXT")
213
773
  .addRecord()
214
774
  .setBoolean("BOOLEAN|SINGLE_LINE_TEXT", false)
215
- // .setBoolean("BOOLEAN", false)
775
+ .setBoolean("BOOLEAN", false)
216
776
  .setLong("LONG|SINGLE_LINE_TEXT", 0)
217
777
  .setLong("LONG", 0)
778
+ .setLong("LONG|DATE", 0)
779
+ .setLong("LONG|DATE|JST", 0)
780
+ .setLong("LONG|DATE|PST", 0)
781
+ .setLong("LONG|TIME", 0)
782
+ .setLong("LONG|TIME|JST", 0)
783
+ .setLong("LONG|TIME|PST", 0)
784
+ .setLong("LONG|DATETIME", 0)
218
785
  .setDouble("DOUBLE|SINGLE_LINE_TEXT", 0)
219
786
  .setDouble("DOUBLE", 0)
787
+ .setDouble("DOUBLE|DATE", 0)
788
+ .setDouble("DOUBLE|DATE|JST", 0)
789
+ .setDouble("DOUBLE|DATE|PST", 0)
790
+ .setDouble("DOUBLE|TIME", 0)
791
+ .setDouble("DOUBLE|TIME|JST", 0)
792
+ .setDouble("DOUBLE|TIME|PST", 0)
793
+ .setDouble("DOUBLE|DATETIME", 0)
220
794
  .setString("STRING|SINGLE_LINE_TEXT", "")
221
795
  .setString("STRING", "")
796
+ .setString("STRING|RICH_TEXT", "")
222
797
  .setString("STRING|NUMBER", "")
223
798
  .setString("STRING|CHECK_BOX", "")
799
+ .setString("STRING|RADIO_BUTTON", "")
800
+ .setString("STRING|MULTI_SELECT", "")
224
801
  .setString("STRING|DROP_DOWN", "")
802
+ .setString("STRING|DATE", "")
803
+ .setString("STRING|DATE|JST", "")
804
+ .setString("STRING|DATE|PST", "")
805
+ .setString("STRING|TIME", "")
806
+ .setString("STRING|TIME|JST", "")
807
+ .setString("STRING|TIME|PST", "")
808
+ .setString("STRING|DATETIME", "")
225
809
  .setString("STRING|LINK", "")
810
+ .setString("STRING|SUBTABLE", "")
226
811
  .setTimestamp("TIMESTAMP|SINGLE_LINE_TEXT", Timestamp.ofInstant(Instant.EPOCH))
812
+ .setTimestamp("TIMESTAMP|NUMBER", Timestamp.ofInstant(Instant.EPOCH))
227
813
  .setTimestamp("TIMESTAMP|DATE", Timestamp.ofInstant(Instant.EPOCH))
228
814
  .setTimestamp("TIMESTAMP|DATE|JST", Timestamp.ofInstant(Instant.EPOCH))
229
815
  .setTimestamp("TIMESTAMP|DATE|PST", Timestamp.ofInstant(Instant.EPOCH))
816
+ .setTimestamp("TIMESTAMP|TIME", Timestamp.ofInstant(Instant.EPOCH))
817
+ .setTimestamp("TIMESTAMP|TIME|JST", Timestamp.ofInstant(Instant.EPOCH))
818
+ .setTimestamp("TIMESTAMP|TIME|PST", Timestamp.ofInstant(Instant.EPOCH))
230
819
  .setTimestamp("TIMESTAMP", Timestamp.ofInstant(Instant.EPOCH))
231
820
  .setJson("JSON|SINGLE_LINE_TEXT", ValueFactory.newString(""))
232
821
  .setJson("JSON", ValueFactory.newString(""))
822
+ .setJson("JSON|SUBTABLE", ValueFactory.newString(""))
823
+ .setJson("JSON|SUBTABLE.SINGLE_LINE_TEXT", ValueFactory.newString(""))
233
824
  .addRecord()
234
825
  .setBoolean("BOOLEAN|SINGLE_LINE_TEXT", true)
235
- // .setBoolean("BOOLEAN", true)
826
+ .setBoolean("BOOLEAN", true)
236
827
  .setLong("LONG|SINGLE_LINE_TEXT", 123)
237
828
  .setLong("LONG", 123)
829
+ .setLong("LONG|DATE", 946684799)
830
+ .setLong("LONG|DATE|JST", 946684799)
831
+ .setLong("LONG|DATE|PST", 946684799)
832
+ .setLong("LONG|TIME", 946684799)
833
+ .setLong("LONG|TIME|JST", 946684799)
834
+ .setLong("LONG|TIME|PST", 946684799)
835
+ .setLong("LONG|DATETIME", 946684799)
238
836
  .setDouble("DOUBLE|SINGLE_LINE_TEXT", 123)
239
837
  .setDouble("DOUBLE", 123)
838
+ .setDouble("DOUBLE|DATE", 946684799)
839
+ .setDouble("DOUBLE|DATE|JST", 946684799)
840
+ .setDouble("DOUBLE|DATE|PST", 946684799)
841
+ .setDouble("DOUBLE|TIME", 946684799)
842
+ .setDouble("DOUBLE|TIME|JST", 946684799)
843
+ .setDouble("DOUBLE|TIME|PST", 946684799)
844
+ .setDouble("DOUBLE|DATETIME", 946684799)
240
845
  .setString("STRING|SINGLE_LINE_TEXT", "abc")
241
846
  .setString("STRING", "abc")
847
+ .setString("STRING|RICH_TEXT", "abc")
242
848
  .setString("STRING|NUMBER", "123")
243
849
  .setString("STRING|CHECK_BOX", "123,abc")
850
+ .setString("STRING|RADIO_BUTTON", "abc")
851
+ .setString("STRING|MULTI_SELECT", "123,abc")
244
852
  .setString("STRING|DROP_DOWN", "abc")
853
+ .setString("STRING|DATE", "1999-12-31")
854
+ .setString("STRING|DATE|JST", "1999-12-31")
855
+ .setString("STRING|DATE|PST", "1999-12-31")
856
+ .setString("STRING|TIME", "23:59:59")
857
+ .setString("STRING|TIME|JST", "23:59:59")
858
+ .setString("STRING|TIME|PST", "23:59:59")
859
+ .setString("STRING|DATETIME", "1999-12-31T23:59:59Z")
245
860
  .setString("STRING|LINK", "abc")
861
+ .setString("STRING|SUBTABLE", String.format("[%s,%s,%s]", ROWS[0], ROWS[1], ROWS[2]))
246
862
  .setTimestamp("TIMESTAMP|SINGLE_LINE_TEXT", timestamp("1999-12-31T23:59:59Z"))
863
+ .setTimestamp("TIMESTAMP|NUMBER", timestamp("1999-12-31T23:59:59Z"))
247
864
  .setTimestamp("TIMESTAMP|DATE", timestamp("1999-12-31T23:59:59Z"))
248
865
  .setTimestamp("TIMESTAMP|DATE|JST", timestamp("1999-12-31T23:59:59Z"))
249
866
  .setTimestamp("TIMESTAMP|DATE|PST", timestamp("1999-12-31T23:59:59Z"))
867
+ .setTimestamp("TIMESTAMP|TIME", timestamp("1999-12-31T23:59:59Z"))
868
+ .setTimestamp("TIMESTAMP|TIME|JST", timestamp("1999-12-31T23:59:59Z"))
869
+ .setTimestamp("TIMESTAMP|TIME|PST", timestamp("1999-12-31T23:59:59Z"))
250
870
  .setTimestamp("TIMESTAMP", timestamp("1999-12-31T23:59:59Z"))
251
871
  .setJson("JSON|SINGLE_LINE_TEXT", ValueFactory.newString("abc"))
252
872
  .setJson("JSON", ValueFactory.newString("abc"))
873
+ .setJson(
874
+ "JSON|SUBTABLE", ValueFactory.newArray(value(ROWS[0]), value(ROWS[1]), value(ROWS[2])))
875
+ .setJson("JSON|SUBTABLE.SINGLE_LINE_TEXT", ValueFactory.newString("abc"))
253
876
  .addRecord()
254
877
  .setBoolean("BOOLEAN|SINGLE_LINE_TEXT", false)
255
- // .setBoolean("BOOLEAN", false)
878
+ .setBoolean("BOOLEAN", false)
256
879
  .setLong("LONG|SINGLE_LINE_TEXT", 456)
257
880
  .setLong("LONG", 456)
881
+ .setLong("LONG|DATE", 946684800)
882
+ .setLong("LONG|DATE|JST", 946684800)
883
+ .setLong("LONG|DATE|PST", 946684800)
884
+ .setLong("LONG|TIME", 946684800)
885
+ .setLong("LONG|TIME|JST", 946684800)
886
+ .setLong("LONG|TIME|PST", 946684800)
887
+ .setLong("LONG|DATETIME", 946684800)
258
888
  .setDouble("DOUBLE|SINGLE_LINE_TEXT", 456)
259
889
  .setDouble("DOUBLE", 456)
890
+ .setDouble("DOUBLE|DATE", 946684800)
891
+ .setDouble("DOUBLE|DATE|JST", 946684800)
892
+ .setDouble("DOUBLE|DATE|PST", 946684800)
893
+ .setDouble("DOUBLE|TIME", 946684800)
894
+ .setDouble("DOUBLE|TIME|JST", 946684800)
895
+ .setDouble("DOUBLE|TIME|PST", 946684800)
896
+ .setDouble("DOUBLE|DATETIME", 946684800)
260
897
  .setString("STRING|SINGLE_LINE_TEXT", "def")
261
898
  .setString("STRING", "def")
899
+ .setString("STRING|RICH_TEXT", "def")
262
900
  .setString("STRING|NUMBER", "456")
263
901
  .setString("STRING|CHECK_BOX", "456,def")
902
+ .setString("STRING|RADIO_BUTTON", "def")
903
+ .setString("STRING|MULTI_SELECT", "456,def")
264
904
  .setString("STRING|DROP_DOWN", "def")
905
+ .setString("STRING|DATE", "2000-01-01")
906
+ .setString("STRING|DATE|JST", "2000-01-01")
907
+ .setString("STRING|DATE|PST", "2000-01-01")
908
+ .setString("STRING|TIME", "00:00:00")
909
+ .setString("STRING|TIME|JST", "00:00:00")
910
+ .setString("STRING|TIME|PST", "00:00:00")
911
+ .setString("STRING|DATETIME", "2000-01-01T00:00:00Z")
265
912
  .setString("STRING|LINK", "def")
913
+ .setString("STRING|SUBTABLE", String.format("[%s,%s,%s]", ROWS[3], ROWS[4], ROWS[5]))
266
914
  .setTimestamp("TIMESTAMP|SINGLE_LINE_TEXT", timestamp("2000-01-01T00:00:00Z"))
915
+ .setTimestamp("TIMESTAMP|NUMBER", timestamp("2000-01-01T00:00:00Z"))
267
916
  .setTimestamp("TIMESTAMP|DATE", timestamp("2000-01-01T00:00:00Z"))
268
917
  .setTimestamp("TIMESTAMP|DATE|JST", timestamp("2000-01-01T00:00:00Z"))
269
918
  .setTimestamp("TIMESTAMP|DATE|PST", timestamp("2000-01-01T00:00:00Z"))
919
+ .setTimestamp("TIMESTAMP|TIME", timestamp("2000-01-01T00:00:00Z"))
920
+ .setTimestamp("TIMESTAMP|TIME|JST", timestamp("2000-01-01T00:00:00Z"))
921
+ .setTimestamp("TIMESTAMP|TIME|PST", timestamp("2000-01-01T00:00:00Z"))
270
922
  .setTimestamp("TIMESTAMP", timestamp("2000-01-01T00:00:00Z"))
271
923
  .setJson("JSON|SINGLE_LINE_TEXT", ValueFactory.newString("def"))
272
924
  .setJson("JSON", ValueFactory.newString("def"))
925
+ .setJson(
926
+ "JSON|SUBTABLE", ValueFactory.newArray(value(ROWS[3]), value(ROWS[4]), value(ROWS[5])))
927
+ .setJson("JSON|SUBTABLE.SINGLE_LINE_TEXT", ValueFactory.newString("def"))
273
928
  .addRecord()
274
929
  .build();
275
930
  }
276
931
 
277
- private static BigDecimal number(String value) {
278
- return new BigDecimal(value);
279
- }
280
-
281
- @SafeVarargs
282
- private static <T> List<T> list(T... a) {
283
- return Arrays.asList(a);
284
- }
285
-
286
- private static LocalDate date(CharSequence text) {
287
- return LocalDate.parse(text);
288
- }
289
-
290
- private static ZonedDateTime dateTime(CharSequence text) {
291
- return ZonedDateTime.parse(text).withZoneSameInstant(ZoneId.of("UTC"));
292
- }
293
-
294
932
  private static Timestamp timestamp(CharSequence text) {
295
933
  return Timestamp.ofInstant(Instant.parse(text));
296
934
  }
935
+
936
+ private static Value value(String json) {
937
+ return PARSER.parse(json);
938
+ }
297
939
  }