embulk 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +15 -0
- data/.gitignore +13 -0
- data/Gemfile +3 -0
- data/Gemfile.lock +33 -0
- data/README.md +117 -0
- data/Rakefile +58 -0
- data/bin/embulk +63 -0
- data/build.gradle +149 -0
- data/embulk-cli/build.gradle +6 -0
- data/embulk-cli/pom.xml +94 -0
- data/embulk-cli/src/main/java/org/embulk/cli/Main.java +15 -0
- data/embulk-core/build.gradle +6 -0
- data/embulk-core/pom.xml +143 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkService.java +39 -0
- data/embulk-core/src/main/java/org/embulk/command/Runner.java +199 -0
- data/embulk-core/src/main/java/org/embulk/command/TablePrinter.java +119 -0
- data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +26 -0
- data/embulk-core/src/main/java/org/embulk/config/Config.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigDefault.java +15 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +83 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +28 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSource.java +35 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +208 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +80 -0
- data/embulk-core/src/main/java/org/embulk/config/GenericTypeReference.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ModelManager.java +125 -0
- data/embulk-core/src/main/java/org/embulk/config/NextConfig.java +26 -0
- data/embulk-core/src/main/java/org/embulk/config/Task.java +10 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskInvocationHandler.java +180 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +343 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +28 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +37 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +45 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecuteInterruptedException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecuteResult.java +19 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
- data/embulk-core/src/main/java/org/embulk/exec/ForSystemConfig.java +16 -0
- data/embulk-core/src/main/java/org/embulk/exec/GuessExecutor.java +307 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalExecutor.java +274 -0
- data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +30 -0
- data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +58 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +138 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewResult.java +27 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewedNoticeError.java +17 -0
- data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +116 -0
- data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +69 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +100 -0
- data/embulk-core/src/main/java/org/embulk/plugin/BuiltinPluginSourceModule.java +17 -0
- data/embulk-core/src/main/java/org/embulk/plugin/InjectedPluginSource.java +92 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +34 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSource.java +6 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginSourceNotMatchException.java +19 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginType.java +47 -0
- data/embulk-core/src/main/java/org/embulk/plugin/SetThreadContextClassLoader.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/BufferAllocator.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/Column.java +92 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnConfig.java +79 -0
- data/embulk-core/src/main/java/org/embulk/spi/DecoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/EncoderPlugin.java +16 -0
- data/embulk-core/src/main/java/org/embulk/spi/Exec.java +76 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecAction.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecSession.java +105 -0
- data/embulk-core/src/main/java/org/embulk/spi/Extension.java +42 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputPlugin.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutput.java +13 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputPlugin.java +20 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +167 -0
- data/embulk-core/src/main/java/org/embulk/spi/FormatterPlugin.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/GuessPlugin.java +9 -0
- data/embulk-core/src/main/java/org/embulk/spi/InputPlugin.java +20 -0
- data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +21 -0
- data/embulk-core/src/main/java/org/embulk/spi/Page.java +45 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +327 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageFormat.java +47 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageOutput.java +11 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageReader.java +227 -0
- data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/Schema.java +101 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaVisitor.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/Transactional.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileInput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalFileOutput.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/TransactionalPageOutput.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/DateTimeZoneSerDe.java +57 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelper.java +8 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/JRubyTimeParserHelperFactory.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/Timestamp.java +159 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormat.java +98 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +6 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +60 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +50 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/BooleanType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/DoubleType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/LongType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/StringType.java +12 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TimestampType.java +39 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Type.java +15 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/TypeDeserializer.java +47 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/CharsetSerDe.java +55 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Decoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Encoders.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +110 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +94 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +111 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +74 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineDecoder.java +118 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/LineEncoder.java +109 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/ListFileInput.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Newline.java +38 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/PagePrinter.java +102 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Pages.java +139 -0
- data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +110 -0
- data/embulk-core/src/test/java/org/embulk/GuiceBinder.java +72 -0
- data/embulk-core/src/test/java/org/embulk/RandomManager.java +53 -0
- data/embulk-core/src/test/java/org/embulk/TestPluginSourceModule.java +23 -0
- data/embulk-core/src/test/java/org/embulk/TestUtilityModule.java +17 -0
- data/embulk-core/src/test/java/org/embulk/config/TestConfigSource.java +114 -0
- data/embulk-core/src/test/java/org/embulk/config/TestTaskSource.java +70 -0
- data/embulk-core/src/test/java/org/embulk/plugin/MockPluginSource.java +57 -0
- data/embulk-core/src/test/java/org/embulk/plugin/TestPluginType.java +18 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFileOutput.java +63 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockFormatterPlugin.java +101 -0
- data/embulk-core/src/test/java/org/embulk/spi/MockParserPlugin.java +73 -0
- data/embulk-core/src/test/java/org/embulk/spi/PageTestUtils.java +78 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +67 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +180 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +192 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestInputStreamFileInput.java +188 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestPageBuilderReader.java +301 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestamp.java +116 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParser.java +52 -0
- data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineDecoder.java +132 -0
- data/embulk-core/src/test/java/org/embulk/spi/util/TestLineEncoder.java +123 -0
- data/embulk-standards/build.gradle +6 -0
- data/embulk-standards/pom.xml +68 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +158 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +233 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +355 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileDecoderPlugin.java +55 -0
- data/embulk-standards/src/main/java/org/embulk/standards/GzipFileEncoderPlugin.java +39 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +138 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +128 -0
- data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +46 -0
- data/embulk-standards/src/main/java/org/embulk/standards/S3FileInputPlugin.java +238 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginExtension.java +16 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StandardPluginModule.java +44 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +71 -0
- data/embulk-standards/src/main/resources/META-INF/services/org.embulk.spi.Extension +1 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +69 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +291 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestS3FileInputPlugin.java +43 -0
- data/embulk.gemspec +27 -0
- data/examples/config.yml +34 -0
- data/examples/csv/sample.csv.gz +0 -0
- data/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/gradlew +164 -0
- data/gradlew.bat +90 -0
- data/lib/embulk.rb +16 -0
- data/lib/embulk/buffer.rb +17 -0
- data/lib/embulk/column.rb +47 -0
- data/lib/embulk/command/embulk.rb +39 -0
- data/lib/embulk/command/embulk_example.rb +32 -0
- data/lib/embulk/command/embulk_generate_bin.rb +62 -0
- data/lib/embulk/command/embulk_run.rb +243 -0
- data/lib/embulk/data/bundle/.bundle/config +3 -0
- data/lib/embulk/data/bundle/Gemfile +31 -0
- data/lib/embulk/data/bundle/Gemfile.lock +8 -0
- data/lib/embulk/data/bundle/embulk/input_example.rb +40 -0
- data/lib/embulk/data/bundle/embulk/output_example.rb +51 -0
- data/lib/embulk/data_source.rb +66 -0
- data/lib/embulk/error.rb +5 -0
- data/lib/embulk/guess_charset.rb +26 -0
- data/lib/embulk/guess_csv.rb +195 -0
- data/lib/embulk/guess_gzip.rb +18 -0
- data/lib/embulk/guess_newline.rb +20 -0
- data/lib/embulk/guess_plugin.rb +113 -0
- data/lib/embulk/input_plugin.rb +53 -0
- data/lib/embulk/java/bootstrap.rb +12 -0
- data/lib/embulk/java/imports.rb +26 -0
- data/lib/embulk/java/time_helper.rb +77 -0
- data/lib/embulk/output_plugin.rb +104 -0
- data/lib/embulk/page.rb +28 -0
- data/lib/embulk/page_builder.rb +22 -0
- data/lib/embulk/plugin.rb +152 -0
- data/lib/embulk/plugin_registry.rb +70 -0
- data/lib/embulk/schema.rb +85 -0
- data/lib/embulk/time_format_guess.rb +331 -0
- data/lib/embulk/version.rb +3 -0
- data/pom.xml +533 -0
- data/settings.gradle +5 -0
- metadata +370 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
package org.embulk.spi.time;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.assertEquals;
|
|
4
|
+
import static org.junit.Assert.assertFalse;
|
|
5
|
+
|
|
6
|
+
import org.junit.Test;
|
|
7
|
+
|
|
8
|
+
public class TestTimestamp
|
|
9
|
+
{
|
|
10
|
+
@Test
|
|
11
|
+
public void testEqualsToTimestamp()
|
|
12
|
+
{
|
|
13
|
+
assertEqualsMethods(Timestamp.ofEpochSecond(0), Timestamp.ofEpochSecond(0));
|
|
14
|
+
assertEqualsMethods(Timestamp.ofEpochSecond(10), Timestamp.ofEpochSecond(10));
|
|
15
|
+
assertEqualsMethods(Timestamp.ofEpochSecond(10, 2), Timestamp.ofEpochSecond(10, 2));
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
private void assertEqualsMethods(Timestamp t1, Timestamp t2)
|
|
19
|
+
{
|
|
20
|
+
assertEquals(t1, t2);
|
|
21
|
+
assertEquals(t1.hashCode(), t2.hashCode());
|
|
22
|
+
assertEquals(0, t1.compareTo(t2));
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
@Test
|
|
26
|
+
public void testNotEqualsToTimestamp()
|
|
27
|
+
{
|
|
28
|
+
assertFalse(Timestamp.ofEpochSecond(0).equals(Timestamp.ofEpochSecond(1)));
|
|
29
|
+
assertFalse(Timestamp.ofEpochSecond(10).equals(Timestamp.ofEpochSecond(10, 2)));
|
|
30
|
+
assertFalse(Timestamp.ofEpochSecond(10, 2).equals(Timestamp.ofEpochSecond(20, 2)));
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Test
|
|
34
|
+
public void testEqualsToNull()
|
|
35
|
+
{
|
|
36
|
+
assertFalse(Timestamp.ofEpochSecond(0).equals(null));
|
|
37
|
+
assertFalse(Timestamp.ofEpochSecond(1, 2).equals(null));
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
@Test
|
|
41
|
+
public void testEqualsOtherClass()
|
|
42
|
+
{
|
|
43
|
+
assertFalse(Timestamp.ofEpochSecond(0).equals(new Object()));
|
|
44
|
+
assertFalse(Timestamp.ofEpochSecond(1, 2).equals("other"));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
@Test
|
|
48
|
+
public void testAdjustMillisToNanos()
|
|
49
|
+
{
|
|
50
|
+
Timestamp t = Timestamp.ofEpochMilli(3); // 3 msec = 3_000 usec == 3_000_000 nsec
|
|
51
|
+
assertEquals(0L, t.getEpochSecond());
|
|
52
|
+
assertEquals(3_000_000, t.getNano());
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Test
|
|
56
|
+
public void testAdjustMillisToSeconds()
|
|
57
|
+
{
|
|
58
|
+
Timestamp t = Timestamp.ofEpochMilli(3_000); // 3_000 msec = 3 sec
|
|
59
|
+
assertEquals(3L, t.getEpochSecond());
|
|
60
|
+
assertEquals(0, t.getNano());
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
@Test
|
|
64
|
+
public void testAdjustNano()
|
|
65
|
+
{
|
|
66
|
+
Timestamp t = Timestamp.ofEpochSecond(0, 1_000_000_000); // 1_000_000_000 nsec = 1_000_000 usec = 1_000 msec = 1 sec
|
|
67
|
+
assertEquals(1L, t.getEpochSecond());
|
|
68
|
+
assertEquals(0, t.getNano());
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@Test
|
|
72
|
+
public void testCompareTo()
|
|
73
|
+
{
|
|
74
|
+
assertEquals(-1, Timestamp.ofEpochSecond(3).compareTo(Timestamp.ofEpochSecond(4)));
|
|
75
|
+
assertEquals(-1, Timestamp.ofEpochSecond(3).compareTo(Timestamp.ofEpochSecond(3, 4)));
|
|
76
|
+
assertEquals( 1, Timestamp.ofEpochSecond(4).compareTo(Timestamp.ofEpochSecond(3)));
|
|
77
|
+
assertEquals( 1, Timestamp.ofEpochSecond(3, 4).compareTo(Timestamp.ofEpochSecond(3)));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@Test
|
|
81
|
+
public void testToString()
|
|
82
|
+
{
|
|
83
|
+
assertEquals("1970-01-01 00:00:00 UTC", Timestamp.ofEpochSecond(0).toString());
|
|
84
|
+
assertEquals("2015-01-19 07:36:10 UTC", Timestamp.ofEpochSecond(1421652970).toString());
|
|
85
|
+
assertEquals("2015-01-19 07:36:10.100 UTC", Timestamp.ofEpochSecond(1421652970, 100*1000*1000).toString());
|
|
86
|
+
assertEquals("2015-01-19 07:36:10.120 UTC", Timestamp.ofEpochSecond(1421652970, 120*1000*1000).toString());
|
|
87
|
+
assertEquals("2015-01-19 07:36:10.123 UTC", Timestamp.ofEpochSecond(1421652970, 123*1000*1000).toString());
|
|
88
|
+
assertEquals("2015-01-19 07:36:10.123400 UTC", Timestamp.ofEpochSecond(1421652970, 123400*1000).toString());
|
|
89
|
+
assertEquals("2015-01-19 07:36:10.123450 UTC", Timestamp.ofEpochSecond(1421652970, 123450*1000).toString());
|
|
90
|
+
assertEquals("2015-01-19 07:36:10.123456 UTC", Timestamp.ofEpochSecond(1421652970, 123456*1000).toString());
|
|
91
|
+
assertEquals("2015-01-19 07:36:10.123456700 UTC", Timestamp.ofEpochSecond(1421652970, 123456700).toString());
|
|
92
|
+
assertEquals("2015-01-19 07:36:10.123456780 UTC", Timestamp.ofEpochSecond(1421652970, 123456780).toString());
|
|
93
|
+
assertEquals("2015-01-19 07:36:10.123456789 UTC", Timestamp.ofEpochSecond(1421652970, 123456789).toString());
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@Test
|
|
97
|
+
public void testFromString()
|
|
98
|
+
{
|
|
99
|
+
checkToStringFromString(Timestamp.ofEpochSecond(0));
|
|
100
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970));
|
|
101
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 100*1000*1000));
|
|
102
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 120*1000*1000));
|
|
103
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123*1000*1000));
|
|
104
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123400*1000));
|
|
105
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123450*1000));
|
|
106
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456*1000));
|
|
107
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456700));
|
|
108
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456780));
|
|
109
|
+
checkToStringFromString(Timestamp.ofEpochSecond(1421652970, 123456789));
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
private void checkToStringFromString(Timestamp timestamp)
|
|
113
|
+
{
|
|
114
|
+
assertEquals(timestamp, Timestamp.fromString(timestamp.toString()));
|
|
115
|
+
}
|
|
116
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
package org.embulk.spi.time;
|
|
2
|
+
|
|
3
|
+
import org.junit.Rule;
|
|
4
|
+
import org.junit.Before;
|
|
5
|
+
import org.junit.Test;
|
|
6
|
+
import static org.junit.Assert.assertEquals;
|
|
7
|
+
import org.embulk.config.Config;
|
|
8
|
+
import org.embulk.config.ConfigSource;
|
|
9
|
+
import org.embulk.spi.Exec;
|
|
10
|
+
import org.embulk.EmbulkTestRuntime;
|
|
11
|
+
|
|
12
|
+
public class TestTimestampFormatterParser
|
|
13
|
+
{
|
|
14
|
+
@Rule
|
|
15
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
|
16
|
+
|
|
17
|
+
private interface FormatterTestTask
|
|
18
|
+
extends TimestampFormatter.FormatterTask
|
|
19
|
+
{
|
|
20
|
+
@Config("time_format")
|
|
21
|
+
public TimestampFormat getTimeFormat();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
private interface ParserTestTask
|
|
25
|
+
extends TimestampParser.ParserTask
|
|
26
|
+
{
|
|
27
|
+
@Config("time_format")
|
|
28
|
+
public TimestampFormat getTimeFormat();
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Test
|
|
32
|
+
public void testSimpleFormat() throws Exception
|
|
33
|
+
{
|
|
34
|
+
ConfigSource config = Exec.newConfigSource()
|
|
35
|
+
.set("time_format", "%Y-%m-%d %H:%M:%S %Z");
|
|
36
|
+
FormatterTestTask task = config.loadConfig(FormatterTestTask.class);
|
|
37
|
+
|
|
38
|
+
TimestampFormatter formatter = task.getTimeFormat().newFormatter(task);
|
|
39
|
+
assertEquals("2014-11-19 02:46:29 UTC", formatter.format(Timestamp.ofEpochSecond(1416365189)));
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Test
|
|
43
|
+
public void testSimpleParse() throws Exception
|
|
44
|
+
{
|
|
45
|
+
ConfigSource config = Exec.newConfigSource()
|
|
46
|
+
.set("time_format", "%Y-%m-%d %H:%M:%S %Z");
|
|
47
|
+
ParserTestTask task = config.loadConfig(ParserTestTask.class);
|
|
48
|
+
|
|
49
|
+
TimestampParser parser = task.getTimeFormat().newParser(task);
|
|
50
|
+
assertEquals(Timestamp.ofEpochSecond(1416365189), parser.parse("2014-11-19 02:46:29 UTC"));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
package org.embulk.spi.type;
|
|
2
|
+
|
|
3
|
+
import org.junit.Rule;
|
|
4
|
+
import org.junit.Before;
|
|
5
|
+
import org.junit.Test;
|
|
6
|
+
import static org.junit.Assert.assertEquals;
|
|
7
|
+
import static org.junit.Assert.assertTrue;
|
|
8
|
+
import com.google.inject.Inject;
|
|
9
|
+
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
10
|
+
import com.fasterxml.jackson.annotation.JsonProperty;
|
|
11
|
+
import org.embulk.EmbulkTestRuntime;
|
|
12
|
+
|
|
13
|
+
public class TestTypeSerDe
|
|
14
|
+
{
|
|
15
|
+
@Rule
|
|
16
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
|
17
|
+
|
|
18
|
+
private static class HasType
|
|
19
|
+
{
|
|
20
|
+
private Type type;
|
|
21
|
+
// TODO test TimestampType
|
|
22
|
+
|
|
23
|
+
@JsonCreator
|
|
24
|
+
public HasType(
|
|
25
|
+
@JsonProperty("type") Type type)
|
|
26
|
+
{
|
|
27
|
+
this.type = type;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
@JsonProperty("type")
|
|
31
|
+
public Type getType()
|
|
32
|
+
{
|
|
33
|
+
return type;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@Test
|
|
38
|
+
public void testGetType()
|
|
39
|
+
{
|
|
40
|
+
HasType type = new HasType(StringType.STRING);
|
|
41
|
+
String json = runtime.getModelManager().writeObject(type);
|
|
42
|
+
HasType decoded = runtime.getModelManager().readObject(HasType.class, json);
|
|
43
|
+
assertTrue(StringType.STRING == decoded.getType());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
import java.nio.ByteBuffer;
|
|
6
|
+
import java.nio.charset.Charset;
|
|
7
|
+
import java.nio.charset.UnsupportedCharsetException;
|
|
8
|
+
import com.google.common.collect.ImmutableList;
|
|
9
|
+
import org.junit.Rule;
|
|
10
|
+
import org.junit.Before;
|
|
11
|
+
import org.junit.Test;
|
|
12
|
+
import static org.junit.Assert.assertEquals;
|
|
13
|
+
import org.embulk.config.ConfigSource;
|
|
14
|
+
import org.embulk.spi.Exec;
|
|
15
|
+
import org.embulk.spi.Buffer;
|
|
16
|
+
import org.embulk.spi.util.ListFileInput;
|
|
17
|
+
import org.embulk.EmbulkTestRuntime;
|
|
18
|
+
|
|
19
|
+
public class TestLineDecoder
|
|
20
|
+
{
|
|
21
|
+
@Rule
|
|
22
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
|
23
|
+
|
|
24
|
+
@Test
|
|
25
|
+
public void testDefaultValues()
|
|
26
|
+
{
|
|
27
|
+
ConfigSource config = Exec.newConfigSource();
|
|
28
|
+
LineDecoder.DecoderTask task = config.loadConfig(LineDecoder.DecoderTask.class);
|
|
29
|
+
assertEquals(Charset.forName("utf-8"), task.getCharset());
|
|
30
|
+
assertEquals(Newline.CRLF, task.getNewline());
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
@Test
|
|
34
|
+
public void testLoadConfig()
|
|
35
|
+
{
|
|
36
|
+
ConfigSource config = Exec.newConfigSource()
|
|
37
|
+
.set("charset", "utf-16")
|
|
38
|
+
.set("newline", "CRLF");
|
|
39
|
+
LineDecoder.DecoderTask task = config.loadConfig(LineDecoder.DecoderTask.class);
|
|
40
|
+
assertEquals(Charset.forName("utf-16"), task.getCharset());
|
|
41
|
+
assertEquals(Newline.CRLF, task.getNewline());
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
private static LineDecoder.DecoderTask getExampleConfig()
|
|
45
|
+
{
|
|
46
|
+
ConfigSource config = Exec.newConfigSource()
|
|
47
|
+
.set("charset", "utf-8")
|
|
48
|
+
.set("newline", "LF");
|
|
49
|
+
return config.loadConfig(LineDecoder.DecoderTask.class);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
private static LineDecoder newDecoder(Charset charset, Newline newline, List<Buffer> buffers)
|
|
53
|
+
{
|
|
54
|
+
ListFileInput input = new ListFileInput(ImmutableList.of(buffers));
|
|
55
|
+
return new LineDecoder(input, getExampleConfig());
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
private static List<String> doDecode(Charset charset, Newline newline, List<Buffer> buffers)
|
|
59
|
+
{
|
|
60
|
+
ImmutableList.Builder<String> builder = ImmutableList.builder();
|
|
61
|
+
LineDecoder decoder = newDecoder(charset, newline, buffers);
|
|
62
|
+
decoder.nextFile();
|
|
63
|
+
while (true) {
|
|
64
|
+
String line = decoder.poll();
|
|
65
|
+
if (line == null) {
|
|
66
|
+
break;
|
|
67
|
+
}
|
|
68
|
+
builder.add(line);
|
|
69
|
+
}
|
|
70
|
+
return builder.build();
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
private static List<Buffer> bufferList(String charsetName, String... sources) throws UnsupportedCharsetException
|
|
74
|
+
{
|
|
75
|
+
Charset charset = Charset.forName(charsetName);
|
|
76
|
+
|
|
77
|
+
List<Buffer> buffers = new ArrayList<Buffer>();
|
|
78
|
+
for (String source : sources) {
|
|
79
|
+
ByteBuffer buffer = charset.encode(source);
|
|
80
|
+
buffers.add(Buffer.wrap(buffer.array(), 0, buffer.limit()));
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
return buffers;
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Test
|
|
87
|
+
public void testDecodeBasicAscii() throws Exception
|
|
88
|
+
{
|
|
89
|
+
List<String> decoded = doDecode(
|
|
90
|
+
Charset.forName("utf-8"), Newline.LF,
|
|
91
|
+
bufferList("utf-8", "test1\ntest2\ntest3\n"));
|
|
92
|
+
assertEquals(ImmutableList.of("test1", "test2", "test3"), decoded);
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
@Test
|
|
96
|
+
public void testDecodeBasicAsciiCRLF() throws Exception
|
|
97
|
+
{
|
|
98
|
+
List<String> decoded = doDecode(
|
|
99
|
+
Charset.forName("utf-8"), Newline.CRLF,
|
|
100
|
+
bufferList("utf-8", "test1\r\ntest2\r\ntest3\r\n"));
|
|
101
|
+
assertEquals(ImmutableList.of("test1", "test2", "test3"), decoded);
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
@Test
|
|
105
|
+
public void testDecodeBasicAsciiTail() throws Exception
|
|
106
|
+
{
|
|
107
|
+
List<String> decoded = doDecode(
|
|
108
|
+
Charset.forName("utf-8"), Newline.LF,
|
|
109
|
+
bufferList("utf-8", "test1"));
|
|
110
|
+
assertEquals(ImmutableList.of("test1"), decoded);
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
@Test
|
|
114
|
+
public void testDecodeChunksLF() throws Exception
|
|
115
|
+
{
|
|
116
|
+
List<String> decoded = doDecode(
|
|
117
|
+
Charset.forName("utf-8"), Newline.LF,
|
|
118
|
+
bufferList("utf-8", "t", "1", "\n", "t", "2"));
|
|
119
|
+
assertEquals(ImmutableList.of("t1", "t2"), decoded);
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
@Test
|
|
123
|
+
public void testDecodeChunksCRLF() throws Exception
|
|
124
|
+
{
|
|
125
|
+
List<String> decoded = doDecode(
|
|
126
|
+
Charset.forName("utf-8"), Newline.CRLF,
|
|
127
|
+
bufferList("utf-8", "t", "1", "\r\n", "t", "2", "\r", "\n", "t3"));
|
|
128
|
+
assertEquals(ImmutableList.of("t1", "t2", "t3"), decoded);
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
// TODO test multibytes
|
|
132
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
import java.util.Iterator;
|
|
6
|
+
import java.io.UnsupportedEncodingException;
|
|
7
|
+
import java.nio.ByteBuffer;
|
|
8
|
+
import java.nio.charset.Charset;
|
|
9
|
+
import java.nio.charset.UnsupportedCharsetException;
|
|
10
|
+
import com.google.common.collect.ImmutableList;
|
|
11
|
+
import org.junit.Rule;
|
|
12
|
+
import org.junit.Before;
|
|
13
|
+
import org.junit.Test;
|
|
14
|
+
import static org.junit.Assert.assertEquals;
|
|
15
|
+
import static org.junit.Assert.assertFalse;
|
|
16
|
+
import org.embulk.config.ConfigSource;
|
|
17
|
+
import org.embulk.spi.Buffer;
|
|
18
|
+
import org.embulk.spi.Exec;
|
|
19
|
+
import org.embulk.spi.MockFileOutput;
|
|
20
|
+
import org.embulk.spi.FileOutput;
|
|
21
|
+
import org.embulk.EmbulkTestRuntime;
|
|
22
|
+
|
|
23
|
+
public class TestLineEncoder
|
|
24
|
+
{
|
|
25
|
+
@Rule
|
|
26
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
|
27
|
+
|
|
28
|
+
private LineEncoder newEncoder(String charset, String newline,
|
|
29
|
+
FileOutput output) throws Exception
|
|
30
|
+
{
|
|
31
|
+
ConfigSource config = Exec.newConfigSource()
|
|
32
|
+
.set("charset", charset)
|
|
33
|
+
.set("newline", newline);
|
|
34
|
+
return new LineEncoder(output, config.loadConfig(LineEncoder.EncoderTask.class));
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@Test
|
|
38
|
+
public void testAddLine() throws Exception
|
|
39
|
+
{
|
|
40
|
+
try (MockFileOutput output = new MockFileOutput()) {
|
|
41
|
+
LineEncoder encoder = newEncoder("utf-8", "LF", output);
|
|
42
|
+
encoder.nextFile();
|
|
43
|
+
for (String line : new String[] { "abc", "日本語(Japanese)" }) {
|
|
44
|
+
encoder.addLine(line);
|
|
45
|
+
}
|
|
46
|
+
encoder.finish();
|
|
47
|
+
// TODO
|
|
48
|
+
//Iterator<Buffer> ite = output.getLastBuffers().iterator();
|
|
49
|
+
//assertEquals("abc", bufferToString(ite.next(), "utf-8"));
|
|
50
|
+
//assertEquals("\n", bufferToString(ite.next(), "utf-8"));
|
|
51
|
+
//assertEquals("日本語(Japanese)", bufferToString(ite.next(), "utf-8"));
|
|
52
|
+
//assertEquals("\n", bufferToString(ite.next(), "utf-8"));
|
|
53
|
+
//assertFalse(ite.hasNext());
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
@Test
|
|
58
|
+
public void testAddTextAddNewLine() throws Exception
|
|
59
|
+
{
|
|
60
|
+
try (MockFileOutput output = new MockFileOutput()) {
|
|
61
|
+
LineEncoder encoder = newEncoder("utf-8", "LF", output);
|
|
62
|
+
encoder.nextFile();
|
|
63
|
+
for (String line : new String[] { "abc", "日本語(Japanese)" }) {
|
|
64
|
+
encoder.addText(line);
|
|
65
|
+
encoder.addNewLine();
|
|
66
|
+
}
|
|
67
|
+
encoder.finish();
|
|
68
|
+
// TODO
|
|
69
|
+
//Iterator<Buffer> ite = output.getLastBuffers().iterator();
|
|
70
|
+
//assertEquals("abc", bufferToString(ite.next(), "utf-8"));
|
|
71
|
+
//assertEquals("\n", bufferToString(ite.next(), "utf-8"));
|
|
72
|
+
//assertEquals("日本語(Japanese)", bufferToString(ite.next(), "utf-8"));
|
|
73
|
+
//assertEquals("\n", bufferToString(ite.next(), "utf-8"));
|
|
74
|
+
//assertFalse(ite.hasNext());
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
@Test
|
|
79
|
+
public void testNewLine() throws Exception
|
|
80
|
+
{
|
|
81
|
+
try (MockFileOutput output = new MockFileOutput()) {
|
|
82
|
+
LineEncoder encoder = newEncoder("utf-8", "CRLF", output);
|
|
83
|
+
encoder.nextFile();
|
|
84
|
+
for (String line : new String[] { "abc", "日本語(Japanese)" }) {
|
|
85
|
+
encoder.addLine(line);
|
|
86
|
+
}
|
|
87
|
+
encoder.finish();
|
|
88
|
+
// TODO
|
|
89
|
+
//Iterator<Buffer> ite = output.getLastBuffers().iterator();
|
|
90
|
+
//assertEquals("abc", bufferToString(ite.next(), "utf-8"));
|
|
91
|
+
//assertEquals("\r\n", bufferToString(ite.next(), "utf-8"));
|
|
92
|
+
//assertEquals("日本語(Japanese)", bufferToString(ite.next(), "utf-8"));
|
|
93
|
+
//assertEquals("\r\n", bufferToString(ite.next(), "utf-8"));
|
|
94
|
+
//assertFalse(ite.hasNext());
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
@Test
|
|
99
|
+
public void testCharset() throws Exception
|
|
100
|
+
{
|
|
101
|
+
try (MockFileOutput output = new MockFileOutput()) {
|
|
102
|
+
LineEncoder encoder = newEncoder("MS932", "CR", output);
|
|
103
|
+
encoder.nextFile();
|
|
104
|
+
for (String line : new String[] { "abc", "日本語(Japanese)" }) {
|
|
105
|
+
encoder.addLine(line);
|
|
106
|
+
}
|
|
107
|
+
encoder.finish();
|
|
108
|
+
// TODO
|
|
109
|
+
//Iterator<Buffer> ite = output.getLastBuffers().iterator();
|
|
110
|
+
//assertEquals("abc", bufferToString(ite.next(), "MS932"));
|
|
111
|
+
//assertEquals("\r", bufferToString(ite.next(), "MS932"));
|
|
112
|
+
//assertEquals("日本語(Japanese)", bufferToString(ite.next(), "MS932"));
|
|
113
|
+
//assertEquals("\r", bufferToString(ite.next(), "MS932"));
|
|
114
|
+
//assertFalse(ite.hasNext());
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
private String bufferToString(Buffer buffer, String charset)
|
|
119
|
+
throws UnsupportedEncodingException
|
|
120
|
+
{
|
|
121
|
+
return new String(buffer.array(), buffer.offset(), buffer.limit(), charset);
|
|
122
|
+
}
|
|
123
|
+
}
|