embulk-output-mysql 0.7.10 → 0.7.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (45) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +16 -0
  3. data/build.gradle +1 -2
  4. data/classpath/{embulk-output-jdbc-0.7.10.jar → embulk-output-jdbc-0.7.11.jar} +0 -0
  5. data/classpath/{embulk-output-mysql-0.7.10.jar → embulk-output-mysql-0.7.11.jar} +0 -0
  6. data/src/test/java/org/embulk/output/mysql/AfterLoadTest.java +136 -0
  7. data/src/test/java/org/embulk/output/mysql/BeforeLoadTest.java +124 -0
  8. data/src/test/java/org/embulk/output/mysql/MySQLTests.java +69 -0
  9. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/setup.sql +8 -0
  10. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test1.csv +4 -0
  11. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_expected.diff +2 -0
  12. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_insert_after_load.yml +3 -0
  13. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_insert_after_load_expected.csv +5 -0
  14. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_insert_direct_after_load.yml +3 -0
  15. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_merge_after_load.yml +3 -0
  16. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_merge_after_load_expected.csv +5 -0
  17. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_merge_direct_after_load.yml +3 -0
  18. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_replace_after_load.yml +3 -0
  19. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_replace_after_load_expected.csv +3 -0
  20. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_truncate_insert_after_load.yml +3 -0
  21. data/src/test/resources/org/embulk/output/mysql/test/expect/after_load/test_truncate_insert_after_load_expected.csv +3 -0
  22. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/setup.sql +8 -0
  23. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test1.csv +4 -0
  24. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_expected.diff +2 -0
  25. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_insert_before_load.yml +3 -0
  26. data/src/test/resources/{mysql/data/test1.csv → org/embulk/output/mysql/test/expect/before_load/test_insert_before_load_expected.csv} +1 -0
  27. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_insert_direct_before_load.yml +3 -0
  28. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_merge_before_load.yml +3 -0
  29. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_merge_before_load_expected.csv +4 -0
  30. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_merge_direct_before_load.yml +3 -0
  31. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_truncate_insert_before_load.yml +3 -0
  32. data/src/test/resources/org/embulk/output/mysql/test/expect/before_load/test_truncate_insert_before_load_expected.csv +4 -0
  33. metadata +31 -17
  34. data/src/test/java/org/embulk/output/mysql/MySQLOutputPluginTest.java +0 -569
  35. data/src/test/resources/mysql/yml/test-insert-after-load.yml +0 -22
  36. data/src/test/resources/mysql/yml/test-insert-before-load.yml +0 -22
  37. data/src/test/resources/mysql/yml/test-insert-direct-after-load.yml +0 -22
  38. data/src/test/resources/mysql/yml/test-insert-direct-before-load.yml +0 -22
  39. data/src/test/resources/mysql/yml/test-merge-after-load.yml +0 -22
  40. data/src/test/resources/mysql/yml/test-merge-before-load.yml +0 -22
  41. data/src/test/resources/mysql/yml/test-merge-direct-after-load.yml +0 -22
  42. data/src/test/resources/mysql/yml/test-merge-direct-before-load.yml +0 -22
  43. data/src/test/resources/mysql/yml/test-replace-after-load.yml +0 -22
  44. data/src/test/resources/mysql/yml/test-truncate-insert-after-load.yml +0 -22
  45. data/src/test/resources/mysql/yml/test-truncate-insert-before-load.yml +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 692465de551dae9499e788eedd698511da8446cd
4
- data.tar.gz: a35c2e193ed89e1402d08abb9562e55c6a29beb1
3
+ metadata.gz: 53e6e129b50f732ddc97a6a9b536be38cd7b9093
4
+ data.tar.gz: 967e7d6b3e1e7927fdf99b317e084734ba91d3b1
5
5
  SHA512:
6
- metadata.gz: 42d2e2458b4d575eaa38b0e1fbb8b9e4aed52c96c8a8c9ffa6d31bd2f14d0448f3445cdb5d6990f0747dd587060e2e1f55666a248d7bf8bc29681937a25889dd
7
- data.tar.gz: cfe4ff6a46f0cddc4001680d98ddc422965a74fd7aadc282944bd6887f49407b023560483cac9893ee39f9849a6ede18f5b52c35d8d60769adcd8ad789d19b45
6
+ metadata.gz: 3a346fb0bc27a2eb2678ce3a45104546e27e7b5bd35654ffceb36359cd18a8d75d04a17df828746729cedb98337a3aa5e109fa898b445e787411db2416467d92
7
+ data.tar.gz: a865c64bbe9aa04e8b7a822f1393817a056ca49e6020e8b90a15a55df62354330af2c46edc53de7f6b08c5326ad2886506e3c4831fddc75abe55948a7172ac3b
data/README.md CHANGED
@@ -120,3 +120,19 @@ out:
120
120
  ```
121
121
  $ ./gradlew gem
122
122
  ```
123
+
124
+ Running tests:
125
+
126
+ You need to create 'mysql.yml' as follows.
127
+ ```
128
+ type: mysql
129
+ host: localhost
130
+ port: 3306
131
+ database: database
132
+ user: user
133
+ password: pass
134
+ ```
135
+
136
+ ```
137
+ $ EMBULK_OUTPUT_MYSQL_TEST_CONFIG=mysql.yml ./gradlew :embulk-output-mysql:check --info
138
+ ```
@@ -2,6 +2,5 @@ dependencies {
2
2
  compile project(':embulk-output-jdbc')
3
3
  compile 'mysql:mysql-connector-java:5.1.34'
4
4
 
5
- testCompile 'org.embulk:embulk-standards:0.8.8'
6
- testCompile project(':embulk-output-jdbc').sourceSets.test.output
5
+ testCompile 'org.embulk:embulk-standards:0.8.22'
7
6
  }
@@ -0,0 +1,136 @@
1
+ package org.embulk.output.mysql;
2
+
3
+ import static org.embulk.output.mysql.MySQLTests.execute;
4
+ import static org.embulk.output.mysql.MySQLTests.selectRecords;
5
+ import static org.hamcrest.Matchers.is;
6
+ import static org.junit.Assert.assertThat;
7
+
8
+ import java.io.File;
9
+ import java.net.URISyntaxException;
10
+ import java.net.URL;
11
+ import java.nio.file.FileSystems;
12
+ import java.nio.file.Path;
13
+
14
+ import org.embulk.config.ConfigDiff;
15
+ import org.embulk.config.ConfigSource;
16
+ import org.embulk.output.MySQLOutputPlugin;
17
+ import org.embulk.spi.OutputPlugin;
18
+ import org.embulk.test.EmbulkTests;
19
+ import org.embulk.test.TestingEmbulk;
20
+ import org.junit.Before;
21
+ import org.junit.Rule;
22
+ import org.junit.Test;
23
+
24
+ import com.google.common.io.Resources;
25
+
26
+ public class AfterLoadTest
27
+ {
28
+ private static final String BASIC_RESOURCE_PATH = "org/embulk/output/mysql/test/expect/after_load/";
29
+
30
+ private static ConfigSource loadYamlResource(TestingEmbulk embulk, String fileName)
31
+ {
32
+ return embulk.loadYamlResource(BASIC_RESOURCE_PATH + fileName);
33
+ }
34
+
35
+ private static String readResource(String fileName)
36
+ {
37
+ return EmbulkTests.readResource(BASIC_RESOURCE_PATH + fileName);
38
+ }
39
+
40
+ @Rule
41
+ public TestingEmbulk embulk = TestingEmbulk.builder()
42
+ .registerPlugin(OutputPlugin.class, "mysql", MySQLOutputPlugin.class)
43
+ .build();
44
+
45
+ private ConfigSource baseConfig;
46
+
47
+ @Before
48
+ public void setup()
49
+ {
50
+ baseConfig = MySQLTests.baseConfig();
51
+ execute(readResource("setup.sql")); // setup rows
52
+ }
53
+
54
+ @Test
55
+ public void testInsertAfterLoad() throws Exception
56
+ {
57
+ execute("insert into test1 values('B001', 0, 'z')");
58
+ execute("insert into test1 values('B002', 9, 'z')");
59
+
60
+ Path in1 = toPath("test1.csv");
61
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert_after_load.yml")), in1);
62
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_insert_after_load_expected.csv")));
63
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
64
+ }
65
+
66
+ @Test
67
+ public void testInsertDirectAfterLoad() throws Exception
68
+ {
69
+ execute("insert into test1 values('B001', 0, 'z')");
70
+ execute("insert into test1 values('B002', 9, 'z')");
71
+
72
+ Path in1 = toPath("test1.csv");
73
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert_direct_after_load.yml")), in1);
74
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_insert_after_load_expected.csv")));
75
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
76
+ }
77
+
78
+ @Test
79
+ public void testTruncateInsertAfterLoad() throws Exception
80
+ {
81
+ execute("insert into test1 values('B001', 0, 'z')");
82
+ execute("insert into test1 values('B002', 9, 'z')");
83
+
84
+ Path in1 = toPath("test1.csv");
85
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_replace_after_load.yml")), in1);
86
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_replace_after_load_expected.csv")));
87
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
88
+ }
89
+
90
+ @Test
91
+ public void testReplaceAfterLoad() throws Exception
92
+ {
93
+ execute("insert into test1 values('B001', 0, 'z')");
94
+ execute("insert into test1 values('B002', 9, 'z')");
95
+
96
+ Path in1 = toPath("test1.csv");
97
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_truncate_insert_after_load.yml")), in1);
98
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_truncate_insert_after_load_expected.csv")));
99
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
100
+ }
101
+
102
+ @Test
103
+ public void testMergeAfterLoad() throws Exception
104
+ {
105
+ execute("insert into test1 values('A002', 1, 'y')");
106
+ execute("insert into test1 values('A003', 1, 'y')");
107
+ execute("insert into test1 values('B001', 0, 'z')");
108
+ execute("insert into test1 values('B002', 9, 'z')");
109
+
110
+ Path in1 = toPath("test1.csv");
111
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_merge_after_load.yml")), in1);
112
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_merge_after_load_expected.csv")));
113
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
114
+ }
115
+
116
+ @Test
117
+ public void testMergeDirectAfterLoad() throws Exception
118
+ {
119
+ execute("insert into test1 values('A002', 1, 'y')");
120
+ execute("insert into test1 values('A003', 1, 'y')");
121
+ execute("insert into test1 values('B001', 0, 'z')");
122
+ execute("insert into test1 values('B002', 9, 'z')");
123
+
124
+ Path in1 = toPath("test1.csv");
125
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_merge_direct_after_load.yml")), in1);
126
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_merge_after_load_expected.csv")));
127
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
128
+ }
129
+
130
+ private Path toPath(String fileName) throws URISyntaxException
131
+ {
132
+ URL url = Resources.getResource(BASIC_RESOURCE_PATH + fileName);
133
+ return FileSystems.getDefault().getPath(new File(url.toURI()).getAbsolutePath());
134
+ }
135
+
136
+ }
@@ -0,0 +1,124 @@
1
+ package org.embulk.output.mysql;
2
+
3
+ import static org.embulk.output.mysql.MySQLTests.execute;
4
+ import static org.embulk.output.mysql.MySQLTests.selectRecords;
5
+ import static org.hamcrest.Matchers.is;
6
+ import static org.junit.Assert.assertThat;
7
+
8
+ import java.io.File;
9
+ import java.net.URISyntaxException;
10
+ import java.net.URL;
11
+ import java.nio.file.FileSystems;
12
+ import java.nio.file.Path;
13
+
14
+ import org.embulk.config.ConfigDiff;
15
+ import org.embulk.config.ConfigSource;
16
+ import org.embulk.output.MySQLOutputPlugin;
17
+ import org.embulk.spi.OutputPlugin;
18
+ import org.embulk.test.EmbulkTests;
19
+ import org.embulk.test.TestingEmbulk;
20
+ import org.junit.Before;
21
+ import org.junit.Rule;
22
+ import org.junit.Test;
23
+
24
+ import com.google.common.io.Resources;
25
+
26
+ public class BeforeLoadTest
27
+ {
28
+ private static final String BASIC_RESOURCE_PATH = "org/embulk/output/mysql/test/expect/before_load/";
29
+
30
+ private static ConfigSource loadYamlResource(TestingEmbulk embulk, String fileName)
31
+ {
32
+ return embulk.loadYamlResource(BASIC_RESOURCE_PATH + fileName);
33
+ }
34
+
35
+ private static String readResource(String fileName)
36
+ {
37
+ return EmbulkTests.readResource(BASIC_RESOURCE_PATH + fileName);
38
+ }
39
+
40
+ @Rule
41
+ public TestingEmbulk embulk = TestingEmbulk.builder()
42
+ .registerPlugin(OutputPlugin.class, "mysql", MySQLOutputPlugin.class)
43
+ .build();
44
+
45
+ private ConfigSource baseConfig;
46
+
47
+ @Before
48
+ public void setup()
49
+ {
50
+ baseConfig = MySQLTests.baseConfig();
51
+ execute(readResource("setup.sql")); // setup rows
52
+ }
53
+
54
+ @Test
55
+ public void testInsertBeforeLoad() throws Exception
56
+ {
57
+ execute("insert into test1 values('B001', 0, 'z')");
58
+ execute("insert into test1 values('B002', 9, 'z')");
59
+
60
+ Path in1 = toPath("test1.csv");
61
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert_before_load.yml")), in1);
62
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_insert_before_load_expected.csv")));
63
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
64
+ }
65
+
66
+ @Test
67
+ public void testInsertDirectBeforeLoad() throws Exception
68
+ {
69
+ execute("insert into test1 values('B001', 0, 'z')");
70
+ execute("insert into test1 values('B002', 9, 'z')");
71
+
72
+ Path in1 = toPath("test1.csv");
73
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_insert_direct_before_load.yml")), in1);
74
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_insert_before_load_expected.csv")));
75
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
76
+ }
77
+
78
+ @Test
79
+ public void testTruncateInsertBeforeLoad() throws Exception
80
+ {
81
+ execute("insert into test1 values('B001', 0, 'z')");
82
+ execute("insert into test1 values('B002', 9, 'z')");
83
+
84
+ Path in1 = toPath("test1.csv");
85
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_truncate_insert_before_load.yml")), in1);
86
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_truncate_insert_before_load_expected.csv")));
87
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
88
+ }
89
+
90
+ @Test
91
+ public void testMergeBeforeLoad() throws Exception
92
+ {
93
+ execute("insert into test1 values('A002', 1, 'y')");
94
+ execute("insert into test1 values('A003', 1, 'y')");
95
+ execute("insert into test1 values('B001', 0, 'z')");
96
+ execute("insert into test1 values('B002', 9, 'z')");
97
+
98
+ Path in1 = toPath("test1.csv");
99
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_merge_before_load.yml")), in1);
100
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_merge_before_load_expected.csv")));
101
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
102
+ }
103
+
104
+ @Test
105
+ public void testMergeDirectBeforeLoad() throws Exception
106
+ {
107
+ execute("insert into test1 values('A002', 1, 'y')");
108
+ execute("insert into test1 values('A003', 1, 'y')");
109
+ execute("insert into test1 values('B001', 0, 'z')");
110
+ execute("insert into test1 values('B002', 9, 'z')");
111
+
112
+ Path in1 = toPath("test1.csv");
113
+ TestingEmbulk.RunResult result1 = embulk.runOutput(baseConfig.merge(loadYamlResource(embulk, "test_merge_direct_before_load.yml")), in1);
114
+ assertThat(selectRecords(embulk, "test1"), is(readResource("test_merge_before_load_expected.csv")));
115
+ //assertThat(result1.getConfigDiff(), is((ConfigDiff) loadYamlResource(embulk, "test_expected.diff")));
116
+ }
117
+
118
+ private Path toPath(String fileName) throws URISyntaxException
119
+ {
120
+ URL url = Resources.getResource(BASIC_RESOURCE_PATH + fileName);
121
+ return FileSystems.getDefault().getPath(new File(url.toURI()).getAbsolutePath());
122
+ }
123
+
124
+ }
@@ -0,0 +1,69 @@
1
+ package org.embulk.output.mysql;
2
+
3
+ import static java.util.Locale.ENGLISH;
4
+ import static org.embulk.test.EmbulkTests.readSortedFile;
5
+
6
+ import java.io.IOException;
7
+ import java.nio.file.Files;
8
+ import java.nio.file.Path;
9
+
10
+ import org.embulk.config.ConfigSource;
11
+ import org.embulk.test.EmbulkTests;
12
+ import org.embulk.test.TestingEmbulk;
13
+
14
+ import com.google.common.base.Throwables;
15
+ import com.google.common.collect.ImmutableList;
16
+ import com.google.common.io.ByteStreams;
17
+
18
+ public class MySQLTests
19
+ {
20
+ public static ConfigSource baseConfig()
21
+ {
22
+ return EmbulkTests.config("EMBULK_OUTPUT_MYSQL_TEST_CONFIG");
23
+ }
24
+
25
+ public static void execute(String sql)
26
+ {
27
+ ConfigSource config = baseConfig();
28
+
29
+ ImmutableList.Builder<String> args = ImmutableList.builder();
30
+ args.add("mysql")
31
+ .add("-u")
32
+ .add(config.get(String.class, "user"));
33
+ if (!config.get(String.class, "password").isEmpty()) {
34
+ args.add("-p" + config.get(String.class, "password"));
35
+ }
36
+ args
37
+ .add("-h")
38
+ .add(config.get(String.class, "host"))
39
+ .add("-P")
40
+ .add(config.get(String.class, "port", "3306"))
41
+ .add(config.get(String.class, "database"))
42
+ .add("-e")
43
+ .add(sql);
44
+
45
+ ProcessBuilder pb = new ProcessBuilder(args.build());
46
+ pb.redirectErrorStream(true);
47
+ int code;
48
+ try {
49
+ Process process = pb.start();
50
+ ByteStreams.copy(process.getInputStream(), System.out);
51
+ code = process.waitFor();
52
+ } catch (IOException | InterruptedException ex) {
53
+ throw Throwables.propagate(ex);
54
+ }
55
+ if (code != 0) {
56
+ throw new RuntimeException(String.format(ENGLISH,
57
+ "Command finished with non-zero exit code. Exit code is %d.", code));
58
+ }
59
+ }
60
+
61
+ public static String selectRecords(TestingEmbulk embulk, String tableName) throws IOException
62
+ {
63
+ Path temp = embulk.createTempFile("txt");
64
+ Files.delete(temp);
65
+ // test user needs FILE privilege
66
+ execute("select * from " + tableName + " into outfile '" + temp.toString().replace("\\", "\\\\") + "' fields terminated by ','");
67
+ return readSortedFile(temp);
68
+ }
69
+ }
@@ -0,0 +1,8 @@
1
+ drop table if exists test1;
2
+
3
+ create table test1 (
4
+ id char(4),
5
+ int_item int,
6
+ varchar_item varchar(8),
7
+ primary key (id)
8
+ );
@@ -0,0 +1,4 @@
1
+ id:string,int_item:long,varchar_item:string
2
+ A001,9,a
3
+ A002,0,b
4
+ A003,9,c
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ mode: insert
3
+ after_load: "update test1 set varchar_item = 'x' where int_item = 9"
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ mode: insert_direct
3
+ after_load: "update test1 set varchar_item = 'x' where int_item = 9"
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ mode: merge
3
+ after_load: "update test1 set varchar_item = 'x' where int_item = 9"
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ mode: merge_direct
3
+ after_load: "update test1 set varchar_item = 'x' where int_item = 9"
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ mode: replace
3
+ after_load: "update test1 set varchar_item = 'x' where int_item = 9"
@@ -0,0 +1,3 @@
1
+ table: test1
2
+ mode: truncate_insert
3
+ after_load: "update test1 set varchar_item = 'x' where int_item = 9"