embulk 0.7.0-java
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 +7 -0
- data/.gitignore +15 -0
- data/.ruby-version +1 -0
- data/.travis.yml +18 -0
- data/COPYING +14 -0
- data/Gemfile +2 -0
- data/Gemfile.lock +31 -0
- data/README.md +206 -0
- data/Rakefile +26 -0
- data/appveyor.yml +20 -0
- data/bin/embulk +106 -0
- data/build.gradle +338 -0
- data/embulk-cli/build.gradle +6 -0
- data/embulk-cli/src/main/java/org/embulk/cli/Main.java +22 -0
- data/embulk-cli/src/main/sh/selfrun.sh +158 -0
- data/embulk-cli/src/test/java/org/embulk/cli/DummyMain.java +23 -0
- data/embulk-cli/src/test/java/org/embulk/cli/SelfrunTest.java +281 -0
- data/embulk-core/build.gradle +59 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkEmbed.java +315 -0
- data/embulk-core/src/main/java/org/embulk/EmbulkService.java +76 -0
- data/embulk-core/src/main/java/org/embulk/command/PreviewPrinter.java +84 -0
- data/embulk-core/src/main/java/org/embulk/command/TablePreviewPrinter.java +107 -0
- data/embulk-core/src/main/java/org/embulk/command/VerticalPreviewPrinter.java +47 -0
- data/embulk-core/src/main/java/org/embulk/config/CommitReport.java +33 -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/ConfigDiff.java +29 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigException.java +20 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigInject.java +14 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigLoader.java +141 -0
- data/embulk-core/src/main/java/org/embulk/config/ConfigSource.java +31 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSource.java +39 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceImpl.java +231 -0
- data/embulk-core/src/main/java/org/embulk/config/DataSourceSerDe.java +84 -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 +123 -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/TaskReport.java +29 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSerDe.java +345 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskSource.java +31 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidationException.java +38 -0
- data/embulk-core/src/main/java/org/embulk/config/TaskValidator.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/BulkLoader.java +652 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecModule.java +52 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecutionInterruptedException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExecutionResult.java +26 -0
- data/embulk-core/src/main/java/org/embulk/exec/ExtensionServiceLoaderModule.java +43 -0
- data/embulk-core/src/main/java/org/embulk/exec/ForGuess.java +16 -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 +373 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalExecutorPlugin.java +129 -0
- data/embulk-core/src/main/java/org/embulk/exec/LocalThreadExecutor.java +34 -0
- data/embulk-core/src/main/java/org/embulk/exec/LoggerProvider.java +60 -0
- data/embulk-core/src/main/java/org/embulk/exec/NoSampleException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/exec/PartialExecutionException.java +18 -0
- data/embulk-core/src/main/java/org/embulk/exec/PooledBufferAllocator.java +77 -0
- data/embulk-core/src/main/java/org/embulk/exec/PreviewExecutor.java +183 -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/ResumeState.java +100 -0
- data/embulk-core/src/main/java/org/embulk/exec/SamplingParserPlugin.java +136 -0
- data/embulk-core/src/main/java/org/embulk/exec/SetCurrentThreadName.java +19 -0
- data/embulk-core/src/main/java/org/embulk/exec/SystemConfigModule.java +24 -0
- data/embulk-core/src/main/java/org/embulk/exec/TempFileAllocator.java +35 -0
- data/embulk-core/src/main/java/org/embulk/guice/Bootstrap.java +157 -0
- data/embulk-core/src/main/java/org/embulk/guice/CloseableInjector.java +22 -0
- data/embulk-core/src/main/java/org/embulk/guice/InjectorProxy.java +145 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjector.java +26 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleInjectorProxy.java +61 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleManager.java +187 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethods.java +89 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleMethodsMap.java +38 -0
- data/embulk-core/src/main/java/org/embulk/guice/LifeCycleModule.java +97 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyPluginSource.java +72 -0
- data/embulk-core/src/main/java/org/embulk/jruby/JRubyScriptingModule.java +119 -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 +96 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoader.java +168 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderFactory.java +9 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginClassLoaderModule.java +71 -0
- data/embulk-core/src/main/java/org/embulk/plugin/PluginManager.java +78 -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/compat/InputPluginWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/PluginWrappers.java +30 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileInputWrapper.java +96 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalFileOutputWrapper.java +102 -0
- data/embulk-core/src/main/java/org/embulk/plugin/compat/TransactionalPageOutputWrapper.java +95 -0
- data/embulk-core/src/main/java/org/embulk/spi/Buffer.java +148 -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 +112 -0
- data/embulk-core/src/main/java/org/embulk/spi/ColumnVisitor.java +14 -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 +113 -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 +217 -0
- data/embulk-core/src/main/java/org/embulk/spi/ExecutorPlugin.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/Extension.java +44 -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 +30 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileInputRunner.java +162 -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 +28 -0
- data/embulk-core/src/main/java/org/embulk/spi/FileOutputRunner.java +202 -0
- data/embulk-core/src/main/java/org/embulk/spi/FilterPlugin.java +18 -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 +33 -0
- data/embulk-core/src/main/java/org/embulk/spi/OutputPlugin.java +29 -0
- data/embulk-core/src/main/java/org/embulk/spi/Page.java +51 -0
- data/embulk-core/src/main/java/org/embulk/spi/PageBuilder.java +338 -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 +226 -0
- data/embulk-core/src/main/java/org/embulk/spi/ParserPlugin.java +17 -0
- data/embulk-core/src/main/java/org/embulk/spi/ProcessState.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/ProcessTask.java +117 -0
- data/embulk-core/src/main/java/org/embulk/spi/Schema.java +134 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfig.java +93 -0
- data/embulk-core/src/main/java/org/embulk/spi/SchemaConfigException.java +22 -0
- data/embulk-core/src/main/java/org/embulk/spi/TaskState.java +81 -0
- data/embulk-core/src/main/java/org/embulk/spi/TempFileException.java +19 -0
- data/embulk-core/src/main/java/org/embulk/spi/TempFileSpace.java +87 -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 +55 -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 +100 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampFormatter.java +97 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParseException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampParser.java +104 -0
- data/embulk-core/src/main/java/org/embulk/spi/time/TimestampSerDe.java +49 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/AbstractType.java +58 -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 +41 -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 +44 -0
- data/embulk-core/src/main/java/org/embulk/spi/type/Types.java +14 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ByteSize.java +156 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFile.java +106 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/LocalFileSerDe.java +113 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ToString.java +54 -0
- data/embulk-core/src/main/java/org/embulk/spi/unit/ToStringMap.java +34 -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/DynamicColumnNotFoundException.java +10 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetter.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicColumnSetterFactory.java +94 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/DynamicPageBuilder.java +161 -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/Executors.java +95 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileInputInputStream.java +111 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/FileOutputOutputStream.java +119 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Filters.java +100 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamFileInput.java +190 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/InputStreamTransactionalFileInput.java +25 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Inputs.java +65 -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 +123 -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/OutputStreamFileOutput.java +88 -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/main/java/org/embulk/spi/util/ResumableInputStream.java +128 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/RetryExecutor.java +130 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/Timestamps.java +53 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/AbstractDynamicColumnSetter.java +79 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/BooleanColumnSetter.java +64 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DefaultValueSetter.java +18 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/DoubleColumnSetter.java +61 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/LongColumnSetter.java +69 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/NullDefaultValueSetter.java +34 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/SkipColumnSetter.java +52 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/StringColumnSetter.java +56 -0
- data/embulk-core/src/main/java/org/embulk/spi/util/dynamic/TimestampColumnSetter.java +64 -0
- data/embulk-core/src/main/resources/embulk/logback-color.xml +72 -0
- data/embulk-core/src/main/resources/embulk/logback-console.xml +14 -0
- data/embulk-core/src/main/resources/embulk/logback-file.xml +25 -0
- data/embulk-core/src/main/resources/embulk/parent_first_packages.properties +70 -0
- data/embulk-core/src/main/resources/embulk/parent_first_resources.properties +28 -0
- data/embulk-core/src/test/java/org/embulk/EmbulkTestRuntime.java +114 -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/TestConfigLoader.java +66 -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 +58 -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 +57 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestBuffer.java +24 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputInputStream.java +89 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileInputRunner.java +196 -0
- data/embulk-core/src/test/java/org/embulk/spi/TestFileOutputRunner.java +207 -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 +319 -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 +63 -0
- data/embulk-core/src/test/java/org/embulk/spi/time/TestTimestampFormatterParserDeprecated.java +67 -0
- data/embulk-core/src/test/java/org/embulk/spi/type/TestTypeSerDe.java +45 -0
- data/embulk-core/src/test/java/org/embulk/spi/unit/TestByteSize.java +79 -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-docs/Makefile +178 -0
- data/embulk-docs/build.gradle +32 -0
- data/embulk-docs/make.bat +243 -0
- data/embulk-docs/push-gh-pages.sh +49 -0
- data/embulk-docs/src/_static/embulk-architecture.png +0 -0
- data/embulk-docs/src/_static/embulk-logo.png +0 -0
- data/embulk-docs/src/_static/embulk-logo.svg +133 -0
- data/embulk-docs/src/built-in.rst +440 -0
- data/embulk-docs/src/conf.py +260 -0
- data/embulk-docs/src/customization.rst +184 -0
- data/embulk-docs/src/index.rst +84 -0
- data/embulk-docs/src/recipe.rst +8 -0
- data/embulk-docs/src/recipe/scheduled-csv-load-to-elasticsearch-kibana4.rst +153 -0
- data/embulk-docs/src/release.rst +57 -0
- data/embulk-docs/src/release/release-0.1.0.rst +8 -0
- data/embulk-docs/src/release/release-0.2.0.rst +16 -0
- data/embulk-docs/src/release/release-0.2.1.rst +19 -0
- data/embulk-docs/src/release/release-0.3.0.rst +34 -0
- data/embulk-docs/src/release/release-0.3.1.rst +11 -0
- data/embulk-docs/src/release/release-0.3.2.rst +15 -0
- data/embulk-docs/src/release/release-0.4.0.rst +74 -0
- data/embulk-docs/src/release/release-0.4.1.rst +18 -0
- data/embulk-docs/src/release/release-0.4.10.rst +17 -0
- data/embulk-docs/src/release/release-0.4.2.rst +18 -0
- data/embulk-docs/src/release/release-0.4.3.rst +34 -0
- data/embulk-docs/src/release/release-0.4.4.rst +39 -0
- data/embulk-docs/src/release/release-0.4.5.rst +24 -0
- data/embulk-docs/src/release/release-0.4.6.rst +30 -0
- data/embulk-docs/src/release/release-0.4.7.rst +16 -0
- data/embulk-docs/src/release/release-0.4.8.rst +15 -0
- data/embulk-docs/src/release/release-0.4.9.rst +23 -0
- data/embulk-docs/src/release/release-0.5.0.rst +89 -0
- data/embulk-docs/src/release/release-0.5.1.rst +13 -0
- data/embulk-docs/src/release/release-0.5.2.rst +30 -0
- data/embulk-docs/src/release/release-0.5.3.rst +22 -0
- data/embulk-docs/src/release/release-0.5.4.rst +24 -0
- data/embulk-docs/src/release/release-0.5.5.rst +18 -0
- data/embulk-docs/src/release/release-0.6.0.rst +34 -0
- data/embulk-docs/src/release/release-0.6.1.rst +11 -0
- data/embulk-docs/src/release/release-0.6.10.rst +15 -0
- data/embulk-docs/src/release/release-0.6.11.rst +19 -0
- data/embulk-docs/src/release/release-0.6.12.rst +31 -0
- data/embulk-docs/src/release/release-0.6.13.rst +23 -0
- data/embulk-docs/src/release/release-0.6.14.rst +47 -0
- data/embulk-docs/src/release/release-0.6.15.rst +26 -0
- data/embulk-docs/src/release/release-0.6.16.rst +26 -0
- data/embulk-docs/src/release/release-0.6.17.rst +39 -0
- data/embulk-docs/src/release/release-0.6.18.rst +14 -0
- data/embulk-docs/src/release/release-0.6.19.rst +18 -0
- data/embulk-docs/src/release/release-0.6.2.rst +17 -0
- data/embulk-docs/src/release/release-0.6.20.rst +19 -0
- data/embulk-docs/src/release/release-0.6.21.rst +20 -0
- data/embulk-docs/src/release/release-0.6.22.rst +26 -0
- data/embulk-docs/src/release/release-0.6.23.rst +17 -0
- data/embulk-docs/src/release/release-0.6.24.rst +13 -0
- data/embulk-docs/src/release/release-0.6.25.rst +12 -0
- data/embulk-docs/src/release/release-0.6.3.rst +23 -0
- data/embulk-docs/src/release/release-0.6.4.rst +13 -0
- data/embulk-docs/src/release/release-0.6.5.rst +17 -0
- data/embulk-docs/src/release/release-0.6.6.rst +17 -0
- data/embulk-docs/src/release/release-0.6.7.rst +17 -0
- data/embulk-docs/src/release/release-0.6.8.rst +24 -0
- data/embulk-docs/src/release/release-0.6.9.rst +24 -0
- data/embulk-docs/src/release/release-0.7.0.rst +96 -0
- data/embulk-standards/build.gradle +5 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvFormatterPlugin.java +284 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvParserPlugin.java +379 -0
- data/embulk-standards/src/main/java/org/embulk/standards/CsvTokenizer.java +411 -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 +71 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileInputPlugin.java +203 -0
- data/embulk-standards/src/main/java/org/embulk/standards/LocalFileOutputPlugin.java +148 -0
- data/embulk-standards/src/main/java/org/embulk/standards/NullOutputPlugin.java +59 -0
- data/embulk-standards/src/main/java/org/embulk/standards/RenameFilterPlugin.java +56 -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 +53 -0
- data/embulk-standards/src/main/java/org/embulk/standards/StdoutOutputPlugin.java +85 -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/TestCsvFormatterPlugin.java +312 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvParserPlugin.java +75 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestCsvTokenizer.java +360 -0
- data/embulk-standards/src/test/java/org/embulk/standards/TestRenameFilterPlugin.java +88 -0
- data/embulk.gemspec +39 -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 +72 -0
- data/lib/embulk/buffer.rb +22 -0
- data/lib/embulk/column.rb +70 -0
- data/lib/embulk/command/embulk_bundle.rb +56 -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_main.rb +2 -0
- data/lib/embulk/command/embulk_migrate_plugin.rb +170 -0
- data/lib/embulk/command/embulk_new_plugin.rb +124 -0
- data/lib/embulk/command/embulk_run.rb +470 -0
- data/lib/embulk/command/embulk_selfupdate.rb +84 -0
- data/lib/embulk/data/bundle/.bundle/config +3 -0
- data/lib/embulk/data/bundle/.ruby-version +1 -0
- data/lib/embulk/data/bundle/Gemfile +26 -0
- data/lib/embulk/data/bundle/embulk/filter/example.rb +42 -0
- data/lib/embulk/data/bundle/embulk/input/example.rb +54 -0
- data/lib/embulk/data/bundle/embulk/output/example.rb +58 -0
- data/lib/embulk/data/new/LICENSE.txt +21 -0
- data/lib/embulk/data/new/README.md.erb +111 -0
- data/lib/embulk/data/new/gitignore.erb +13 -0
- data/lib/embulk/data/new/java/build.gradle.erb +73 -0
- data/lib/embulk/data/new/java/decoder.java.erb +84 -0
- data/lib/embulk/data/new/java/encoder.java.erb +86 -0
- data/lib/embulk/data/new/java/file_input.java.erb +143 -0
- data/lib/embulk/data/new/java/file_output.java.erb +93 -0
- data/lib/embulk/data/new/java/filter.java.erb +56 -0
- data/lib/embulk/data/new/java/formatter.java.erb +54 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.jar +0 -0
- data/lib/embulk/data/new/java/gradle/wrapper/gradle-wrapper.properties +6 -0
- data/lib/embulk/data/new/java/gradlew +164 -0
- data/lib/embulk/data/new/java/gradlew.bat +90 -0
- data/lib/embulk/data/new/java/input.java.erb +87 -0
- data/lib/embulk/data/new/java/output.java.erb +77 -0
- data/lib/embulk/data/new/java/parser.java.erb +60 -0
- data/lib/embulk/data/new/java/plugin_loader.rb.erb +3 -0
- data/lib/embulk/data/new/java/test.java.erb +5 -0
- data/lib/embulk/data/new/ruby/.ruby-version +1 -0
- data/lib/embulk/data/new/ruby/Gemfile +2 -0
- data/lib/embulk/data/new/ruby/Rakefile +3 -0
- data/lib/embulk/data/new/ruby/decoder_guess.rb.erb +25 -0
- data/lib/embulk/data/new/ruby/filter.rb.erb +41 -0
- data/lib/embulk/data/new/ruby/formatter.rb.erb +49 -0
- data/lib/embulk/data/new/ruby/gemspec.erb +20 -0
- data/lib/embulk/data/new/ruby/input.rb.erb +59 -0
- data/lib/embulk/data/new/ruby/output.rb.erb +61 -0
- data/lib/embulk/data/new/ruby/parser.rb.erb +44 -0
- data/lib/embulk/data/new/ruby/parser_guess.rb.erb +65 -0
- data/lib/embulk/data/package_data.rb +50 -0
- data/lib/embulk/data_source.rb +220 -0
- data/lib/embulk/decoder_plugin.rb +27 -0
- data/lib/embulk/encoder_plugin.rb +27 -0
- data/lib/embulk/error.rb +8 -0
- data/lib/embulk/executor_plugin.rb +23 -0
- data/lib/embulk/file_input.rb +87 -0
- data/lib/embulk/file_input_plugin.rb +27 -0
- data/lib/embulk/file_output.rb +56 -0
- data/lib/embulk/file_output_plugin.rb +27 -0
- data/lib/embulk/filter_plugin.rb +105 -0
- data/lib/embulk/formatter_plugin.rb +105 -0
- data/lib/embulk/guess/charset.rb +44 -0
- data/lib/embulk/guess/csv.rb +327 -0
- data/lib/embulk/guess/gzip.rb +18 -0
- data/lib/embulk/guess/newline.rb +22 -0
- data/lib/embulk/guess/schema_guess.rb +118 -0
- data/lib/embulk/guess/time_format_guess.rb +394 -0
- data/lib/embulk/guess_plugin.rb +129 -0
- data/lib/embulk/input_plugin.rb +121 -0
- data/lib/embulk/java/bootstrap.rb +24 -0
- data/lib/embulk/java/imports.rb +69 -0
- data/lib/embulk/java/time_helper.rb +79 -0
- data/lib/embulk/java_plugin.rb +90 -0
- data/lib/embulk/logger.rb +154 -0
- data/lib/embulk/output_plugin.rb +150 -0
- data/lib/embulk/page.rb +30 -0
- data/lib/embulk/page_builder.rb +76 -0
- data/lib/embulk/parser_plugin.rb +78 -0
- data/lib/embulk/plugin.rb +239 -0
- data/lib/embulk/plugin_registry.rb +96 -0
- data/lib/embulk/runner.rb +184 -0
- data/lib/embulk/schema.rb +103 -0
- data/lib/embulk/version.rb +3 -0
- data/settings.gradle +6 -0
- data/test/guess/test_schema_guess.rb +11 -0
- data/test/guess/test_time_format_guess.rb +133 -0
- data/test/helper.rb +21 -0
- data/test/run-test.rb +14 -0
- metadata +566 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import org.embulk.config.Config;
|
|
4
|
+
import org.embulk.config.ConfigSource;
|
|
5
|
+
import org.embulk.config.Task;
|
|
6
|
+
import org.embulk.config.TaskSource;
|
|
7
|
+
import org.embulk.spi.time.Timestamp;
|
|
8
|
+
import org.embulk.spi.type.Type;
|
|
9
|
+
import org.embulk.spi.Column;
|
|
10
|
+
import org.embulk.spi.Schema;
|
|
11
|
+
import org.embulk.spi.SchemaConfig;
|
|
12
|
+
import org.embulk.spi.PageOutput;
|
|
13
|
+
|
|
14
|
+
public class MockParserPlugin implements ParserPlugin
|
|
15
|
+
{
|
|
16
|
+
public static boolean raiseException = false;
|
|
17
|
+
|
|
18
|
+
public interface PluginTask extends Task
|
|
19
|
+
{
|
|
20
|
+
@Config("columns")
|
|
21
|
+
public SchemaConfig getSchemaConfig();
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
@Override
|
|
25
|
+
public void transaction(ConfigSource config, Control control)
|
|
26
|
+
{
|
|
27
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
|
28
|
+
control.run(task.dump(), task.getSchemaConfig().toSchema());
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
@Override
|
|
32
|
+
public void run(TaskSource taskSource, Schema schema,
|
|
33
|
+
FileInput input, PageOutput output)
|
|
34
|
+
{
|
|
35
|
+
try (final PageBuilder pageBuilder = new PageBuilder(
|
|
36
|
+
Exec.getBufferAllocator(), schema, output)) {
|
|
37
|
+
while (input.nextFile()) {
|
|
38
|
+
Buffer buffer = input.poll();
|
|
39
|
+
if (buffer != null) {
|
|
40
|
+
for (Column column : schema.getColumns()) {
|
|
41
|
+
Type type = column.getType();
|
|
42
|
+
switch (type.getName()) {
|
|
43
|
+
case "boolean":
|
|
44
|
+
pageBuilder.setBoolean(column, true);
|
|
45
|
+
break;
|
|
46
|
+
case "long":
|
|
47
|
+
pageBuilder.setLong(column, 2L);
|
|
48
|
+
break;
|
|
49
|
+
case "double":
|
|
50
|
+
pageBuilder.setDouble(column, 3.0D);
|
|
51
|
+
break;
|
|
52
|
+
case "string":
|
|
53
|
+
pageBuilder.setString(column, "45");
|
|
54
|
+
break;
|
|
55
|
+
case "timestamp":
|
|
56
|
+
pageBuilder.setTimestamp(column,
|
|
57
|
+
Timestamp.ofEpochMilli(678L));
|
|
58
|
+
break;
|
|
59
|
+
default:
|
|
60
|
+
throw new IllegalStateException("Unknown type: "
|
|
61
|
+
+ type.getName());
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
pageBuilder.addRecord();
|
|
65
|
+
if (raiseException) {
|
|
66
|
+
throw new RuntimeException("emulated exception");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
pageBuilder.finish();
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import java.util.ArrayList;
|
|
4
|
+
import java.util.List;
|
|
5
|
+
|
|
6
|
+
import org.embulk.spi.TestPageBuilderReader.MockPageOutput;
|
|
7
|
+
import org.embulk.spi.time.Timestamp;
|
|
8
|
+
import org.embulk.spi.Column;
|
|
9
|
+
import org.embulk.spi.ColumnConfig;
|
|
10
|
+
import org.embulk.spi.Schema;
|
|
11
|
+
import org.embulk.spi.SchemaConfig;
|
|
12
|
+
import org.embulk.spi.ColumnVisitor;
|
|
13
|
+
import org.embulk.spi.type.Type;
|
|
14
|
+
|
|
15
|
+
import com.google.common.collect.ImmutableList;
|
|
16
|
+
|
|
17
|
+
public class PageTestUtils
|
|
18
|
+
{
|
|
19
|
+
private PageTestUtils()
|
|
20
|
+
{ }
|
|
21
|
+
|
|
22
|
+
public static List<Page> buildPage(BufferAllocator bufferAllocator,
|
|
23
|
+
Schema schema, Object... values)
|
|
24
|
+
{
|
|
25
|
+
MockPageOutput output = new MockPageOutput();
|
|
26
|
+
try (PageBuilder builder = new PageBuilder(bufferAllocator, schema,
|
|
27
|
+
output)) {
|
|
28
|
+
int idx = 0;
|
|
29
|
+
while (idx < values.length) {
|
|
30
|
+
for (int column = 0; column < builder.getSchema()
|
|
31
|
+
.getColumnCount(); ++column) {
|
|
32
|
+
Object value = values[idx++];
|
|
33
|
+
if (value == null) {
|
|
34
|
+
builder.setNull(column);
|
|
35
|
+
} else if (value instanceof Boolean) {
|
|
36
|
+
builder.setBoolean(column, (Boolean) value);
|
|
37
|
+
} else if (value instanceof Double) {
|
|
38
|
+
builder.setDouble(column, (Double) value);
|
|
39
|
+
} else if (value instanceof Long) {
|
|
40
|
+
builder.setLong(column, (Long) value);
|
|
41
|
+
} else if (value instanceof String) {
|
|
42
|
+
builder.setString(column, (String) value);
|
|
43
|
+
} else if (value instanceof Timestamp) {
|
|
44
|
+
builder.setTimestamp(column, (Timestamp) value);
|
|
45
|
+
} else {
|
|
46
|
+
throw new IllegalStateException(
|
|
47
|
+
"Unsupported type in test utils: "
|
|
48
|
+
+ value.toString());
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
builder.addRecord();
|
|
52
|
+
}
|
|
53
|
+
builder.finish();
|
|
54
|
+
}
|
|
55
|
+
return output.pages;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.assertEquals;
|
|
4
|
+
import static org.junit.Assert.assertTrue;
|
|
5
|
+
import static org.junit.Assert.assertFalse;
|
|
6
|
+
import org.junit.Test;
|
|
7
|
+
|
|
8
|
+
public class TestBuffer
|
|
9
|
+
{
|
|
10
|
+
@Test
|
|
11
|
+
public void testEquals() throws Exception
|
|
12
|
+
{
|
|
13
|
+
byte[] bytes = new byte[] { 1, 2, 3, 2, 3 };
|
|
14
|
+
Buffer b1 = Buffer.wrap(bytes, 0, 2); // [1, 2]
|
|
15
|
+
Buffer b2 = Buffer.wrap(bytes, 1, 2); // [2, 3]
|
|
16
|
+
Buffer b3 = Buffer.wrap(bytes, 3, 2); // [2, 3]
|
|
17
|
+
|
|
18
|
+
assertFalse(b1.equals(b2));
|
|
19
|
+
assertTrue(b2.equals(b3));
|
|
20
|
+
|
|
21
|
+
assertFalse(b1.hashCode() == b2.hashCode());
|
|
22
|
+
assertTrue(b2.hashCode() == b3.hashCode());
|
|
23
|
+
}
|
|
24
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.assertArrayEquals;
|
|
4
|
+
import static org.junit.Assert.assertEquals;
|
|
5
|
+
import java.io.ByteArrayOutputStream;
|
|
6
|
+
import java.util.Random;
|
|
7
|
+
import org.junit.Rule;
|
|
8
|
+
import org.junit.Test;
|
|
9
|
+
import org.embulk.spi.util.ListFileInput;
|
|
10
|
+
import org.embulk.spi.util.FileInputInputStream;
|
|
11
|
+
import org.embulk.spi.util.FileOutputOutputStream;
|
|
12
|
+
import org.embulk.EmbulkTestRuntime;
|
|
13
|
+
|
|
14
|
+
public class TestFileInputInputStream
|
|
15
|
+
{
|
|
16
|
+
@Rule
|
|
17
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
|
18
|
+
|
|
19
|
+
private ListFileInput fileInput;
|
|
20
|
+
private MockFileOutput fileOutput;
|
|
21
|
+
|
|
22
|
+
private FileInputInputStream in;
|
|
23
|
+
private FileOutputOutputStream out;
|
|
24
|
+
|
|
25
|
+
private void newOutputStream()
|
|
26
|
+
{
|
|
27
|
+
fileOutput = new MockFileOutput();
|
|
28
|
+
out = new FileOutputOutputStream(fileOutput, runtime.getBufferAllocator(), FileOutputOutputStream.CloseMode.CLOSE);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private void newInputStream()
|
|
32
|
+
{
|
|
33
|
+
fileInput = new ListFileInput(fileOutput.getFiles());
|
|
34
|
+
in = new FileInputInputStream(fileInput);
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
@Test
|
|
38
|
+
public void testRandomReadWrite() throws Exception
|
|
39
|
+
{
|
|
40
|
+
newOutputStream();
|
|
41
|
+
out.nextFile();
|
|
42
|
+
ByteArrayOutputStream expectedOut = new ByteArrayOutputStream();
|
|
43
|
+
Random rand = runtime.getRandom();
|
|
44
|
+
byte[] buffer = new byte[rand.nextInt() % 1024 + 1024];
|
|
45
|
+
for (int i = 0; i < 256; i++) {
|
|
46
|
+
rand.nextBytes(buffer);
|
|
47
|
+
expectedOut.write(buffer);
|
|
48
|
+
out.write(buffer);
|
|
49
|
+
}
|
|
50
|
+
out.finish();
|
|
51
|
+
byte[] expected = expectedOut.toByteArray();
|
|
52
|
+
byte[] actual = new byte[expected.length];
|
|
53
|
+
|
|
54
|
+
newInputStream();
|
|
55
|
+
in.nextFile();
|
|
56
|
+
int pos = 0;
|
|
57
|
+
while (pos < actual.length) {
|
|
58
|
+
int n = in.read(actual, pos, actual.length - pos);
|
|
59
|
+
if (n < 0) {
|
|
60
|
+
break;
|
|
61
|
+
}
|
|
62
|
+
pos += n;
|
|
63
|
+
}
|
|
64
|
+
assertEquals(expected.length, pos);
|
|
65
|
+
assertArrayEquals(expected, actual);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
@Test
|
|
69
|
+
public void testSkipReturnsZeroForNoData() {
|
|
70
|
+
FileInputInputStream in = new FileInputInputStream(new MockFileInput());
|
|
71
|
+
assertEquals("Verify skip() returns 0 when there is no data.", 0L, in.skip(1));
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
private static class MockFileInput implements FileInput {
|
|
75
|
+
@Override
|
|
76
|
+
public boolean nextFile() {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@Override
|
|
81
|
+
public Buffer poll() {
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
@Override
|
|
86
|
+
public void close() {
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.assertEquals;
|
|
4
|
+
|
|
5
|
+
import java.util.ArrayList;
|
|
6
|
+
import java.util.Arrays;
|
|
7
|
+
import java.util.LinkedList;
|
|
8
|
+
import java.util.List;
|
|
9
|
+
import java.util.Queue;
|
|
10
|
+
import org.junit.Before;
|
|
11
|
+
import org.junit.Rule;
|
|
12
|
+
import org.junit.Test;
|
|
13
|
+
import com.google.common.collect.ImmutableList;
|
|
14
|
+
import com.google.common.collect.ImmutableMap;
|
|
15
|
+
import org.embulk.EmbulkTestRuntime;
|
|
16
|
+
import org.embulk.config.TaskReport;
|
|
17
|
+
import org.embulk.config.ConfigSource;
|
|
18
|
+
import org.embulk.config.ConfigDiff;
|
|
19
|
+
import org.embulk.config.TaskSource;
|
|
20
|
+
import org.embulk.spi.time.Timestamp;
|
|
21
|
+
import org.embulk.spi.TestPageBuilderReader.MockPageOutput;
|
|
22
|
+
import org.embulk.spi.Schema;
|
|
23
|
+
import org.embulk.spi.util.Pages;
|
|
24
|
+
|
|
25
|
+
public class TestFileInputRunner
|
|
26
|
+
{
|
|
27
|
+
@Rule
|
|
28
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
|
29
|
+
|
|
30
|
+
@Before
|
|
31
|
+
public void tearDown()
|
|
32
|
+
{
|
|
33
|
+
MockParserPlugin.raiseException = false;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
private static class MockFileInputPlugin implements FileInputPlugin
|
|
37
|
+
{
|
|
38
|
+
Boolean transactionCompleted = null;
|
|
39
|
+
Queue<Buffer> buffers;
|
|
40
|
+
|
|
41
|
+
public MockFileInputPlugin(Queue<Buffer> buffers)
|
|
42
|
+
{
|
|
43
|
+
this.buffers = buffers;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
@Override
|
|
47
|
+
public ConfigDiff transaction(ConfigSource config,
|
|
48
|
+
FileInputPlugin.Control control)
|
|
49
|
+
{
|
|
50
|
+
control.run(Exec.newTaskSource(), 1);
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
@Override
|
|
55
|
+
public ConfigDiff resume(TaskSource taskSource,
|
|
56
|
+
int taskCount,
|
|
57
|
+
FileInputPlugin.Control control)
|
|
58
|
+
{
|
|
59
|
+
throw new UnsupportedOperationException();
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
@Override
|
|
63
|
+
public void cleanup(TaskSource taskSource,
|
|
64
|
+
int taskCount,
|
|
65
|
+
List<TaskReport> successTaskReports)
|
|
66
|
+
{
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
public TransactionalFileInput open(TaskSource taskSource,
|
|
70
|
+
int taskIndex)
|
|
71
|
+
{
|
|
72
|
+
return new TransactionalFileInput()
|
|
73
|
+
{
|
|
74
|
+
@Override
|
|
75
|
+
public Buffer poll()
|
|
76
|
+
{
|
|
77
|
+
return buffers.poll();
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
@Override
|
|
81
|
+
public boolean nextFile()
|
|
82
|
+
{
|
|
83
|
+
return !buffers.isEmpty();
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Override
|
|
87
|
+
public void close()
|
|
88
|
+
{
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
@Override
|
|
92
|
+
public void abort()
|
|
93
|
+
{
|
|
94
|
+
transactionCompleted = false;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
@Override
|
|
98
|
+
public TaskReport commit()
|
|
99
|
+
{
|
|
100
|
+
transactionCompleted = true;
|
|
101
|
+
return null;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
@Test
|
|
108
|
+
public void testMockParserIteration()
|
|
109
|
+
{
|
|
110
|
+
Buffer[] buffers = new Buffer[] {
|
|
111
|
+
runtime.getBufferAllocator().allocate(),
|
|
112
|
+
runtime.getBufferAllocator().allocate() };
|
|
113
|
+
MockFileInputPlugin fileInputPlugin = new MockFileInputPlugin(
|
|
114
|
+
new LinkedList<Buffer>(Arrays.asList(buffers)));
|
|
115
|
+
final FileInputRunner runner = new FileInputRunner(fileInputPlugin);
|
|
116
|
+
|
|
117
|
+
ConfigSource config = Exec.newConfigSource().set(
|
|
118
|
+
"parser",
|
|
119
|
+
ImmutableMap.of("type", "mock", "columns", ImmutableList.of(
|
|
120
|
+
ImmutableMap.of("name", "col1", "type", "boolean", "option", ImmutableMap.of()),
|
|
121
|
+
ImmutableMap.of("name", "col2", "type", "long", "option", ImmutableMap.of()),
|
|
122
|
+
ImmutableMap.of("name", "col3", "type", "double", "option", ImmutableMap.of()),
|
|
123
|
+
ImmutableMap.of("name", "col4", "type", "string", "option", ImmutableMap.of()),
|
|
124
|
+
ImmutableMap.of("name", "col5", "type", "timestamp", "option", ImmutableMap.of()))));
|
|
125
|
+
|
|
126
|
+
final MockPageOutput output = new MockPageOutput();
|
|
127
|
+
runner.transaction(config, new InputPlugin.Control()
|
|
128
|
+
{
|
|
129
|
+
public List<TaskReport> run(TaskSource inputTaskSource,
|
|
130
|
+
Schema schema, int taskCount)
|
|
131
|
+
{
|
|
132
|
+
List<TaskReport> reports = new ArrayList<>();
|
|
133
|
+
reports.add(runner.run(inputTaskSource, schema, 0, output));
|
|
134
|
+
return reports;
|
|
135
|
+
}
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
assertEquals(true, fileInputPlugin.transactionCompleted);
|
|
139
|
+
assertEquals(1, output.pages.size());
|
|
140
|
+
|
|
141
|
+
Schema schema = config.getNested("parser")
|
|
142
|
+
.loadConfig(MockParserPlugin.PluginTask.class)
|
|
143
|
+
.getSchemaConfig().toSchema();
|
|
144
|
+
|
|
145
|
+
List<Object[]> records = Pages.toObjects(schema, output.pages);
|
|
146
|
+
assertEquals(2, records.size());
|
|
147
|
+
for (Object[] record : records) {
|
|
148
|
+
assertEquals(5, record.length);
|
|
149
|
+
assertEquals(true, record[0]);
|
|
150
|
+
assertEquals(2L, record[1]);
|
|
151
|
+
assertEquals(3.0D, (Double) record[2], 0.01D);
|
|
152
|
+
assertEquals("45", record[3]);
|
|
153
|
+
assertEquals(678L, ((Timestamp) record[4]).toEpochMilli());
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
@Test
|
|
158
|
+
public void testTransactionAborted()
|
|
159
|
+
{
|
|
160
|
+
Buffer[] buffers = new Buffer[] {
|
|
161
|
+
runtime.getBufferAllocator().allocate(),
|
|
162
|
+
runtime.getBufferAllocator().allocate() };
|
|
163
|
+
MockFileInputPlugin fileInputPlugin = new MockFileInputPlugin(
|
|
164
|
+
new LinkedList<Buffer>(Arrays.asList(buffers)));
|
|
165
|
+
final FileInputRunner runner = new FileInputRunner(fileInputPlugin);
|
|
166
|
+
|
|
167
|
+
ConfigSource config = Exec.newConfigSource().set(
|
|
168
|
+
"parser",
|
|
169
|
+
ImmutableMap.of("type", "mock", "columns", ImmutableList.of(
|
|
170
|
+
ImmutableMap.of("name", "col1", "type", "boolean", "option", ImmutableMap.of()),
|
|
171
|
+
ImmutableMap.of("name", "col2", "type", "long", "option", ImmutableMap.of()),
|
|
172
|
+
ImmutableMap.of("name", "col3", "type", "double", "option", ImmutableMap.of()),
|
|
173
|
+
ImmutableMap.of("name", "col4", "type", "string", "option", ImmutableMap.of()),
|
|
174
|
+
ImmutableMap.of("name", "col5", "type", "timestamp", "option", ImmutableMap.of()))));
|
|
175
|
+
|
|
176
|
+
final MockPageOutput output = new MockPageOutput();
|
|
177
|
+
|
|
178
|
+
MockParserPlugin.raiseException = true;
|
|
179
|
+
|
|
180
|
+
try {
|
|
181
|
+
runner.transaction(config, new InputPlugin.Control()
|
|
182
|
+
{
|
|
183
|
+
public List<TaskReport> run(TaskSource inputTaskSource,
|
|
184
|
+
Schema schema, int taskCount)
|
|
185
|
+
{
|
|
186
|
+
List<TaskReport> reports = new ArrayList<>();
|
|
187
|
+
reports.add(runner.run(inputTaskSource, schema, 0, output));
|
|
188
|
+
return reports;
|
|
189
|
+
}
|
|
190
|
+
});
|
|
191
|
+
} catch (RuntimeException re) {
|
|
192
|
+
}
|
|
193
|
+
assertEquals(false, fileInputPlugin.transactionCompleted);
|
|
194
|
+
assertEquals(0, output.pages.size());
|
|
195
|
+
}
|
|
196
|
+
}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
package org.embulk.spi;
|
|
2
|
+
|
|
3
|
+
import static org.junit.Assert.assertEquals;
|
|
4
|
+
|
|
5
|
+
import java.util.ArrayList;
|
|
6
|
+
import java.util.List;
|
|
7
|
+
|
|
8
|
+
import org.embulk.EmbulkTestRuntime;
|
|
9
|
+
import org.embulk.config.TaskReport;
|
|
10
|
+
import org.embulk.config.ConfigSource;
|
|
11
|
+
import org.embulk.config.ConfigDiff;
|
|
12
|
+
import org.embulk.config.Task;
|
|
13
|
+
import org.embulk.config.TaskSource;
|
|
14
|
+
import org.embulk.spi.time.Timestamp;
|
|
15
|
+
import org.embulk.spi.Schema;
|
|
16
|
+
import org.junit.Rule;
|
|
17
|
+
import org.junit.Test;
|
|
18
|
+
|
|
19
|
+
import com.google.common.collect.ImmutableList;
|
|
20
|
+
import com.google.common.collect.ImmutableMap;
|
|
21
|
+
|
|
22
|
+
public class TestFileOutputRunner
|
|
23
|
+
{
|
|
24
|
+
@Rule
|
|
25
|
+
public EmbulkTestRuntime runtime = new EmbulkTestRuntime();
|
|
26
|
+
|
|
27
|
+
public interface PluginTask extends Task
|
|
28
|
+
{
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
private static class MockFileOutputPlugin implements FileOutputPlugin
|
|
32
|
+
{
|
|
33
|
+
Boolean transactionCompleted = null;
|
|
34
|
+
|
|
35
|
+
@Override
|
|
36
|
+
public ConfigDiff transaction(ConfigSource config, int taskCount,
|
|
37
|
+
FileOutputPlugin.Control control)
|
|
38
|
+
{
|
|
39
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
|
40
|
+
control.run(task.dump());
|
|
41
|
+
return Exec.newConfigDiff();
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
@Override
|
|
45
|
+
public ConfigDiff resume(TaskSource taskSource,
|
|
46
|
+
int taskCount,
|
|
47
|
+
FileOutputPlugin.Control control)
|
|
48
|
+
{
|
|
49
|
+
throw new UnsupportedOperationException();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
@Override
|
|
53
|
+
public void cleanup(TaskSource taskSource,
|
|
54
|
+
int taskCount,
|
|
55
|
+
List<TaskReport> successTaskReports)
|
|
56
|
+
{
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
@Override
|
|
60
|
+
public TransactionalFileOutput open(TaskSource taskSource,
|
|
61
|
+
final int taskIndex)
|
|
62
|
+
{
|
|
63
|
+
return new TransactionalFileOutput()
|
|
64
|
+
{
|
|
65
|
+
|
|
66
|
+
@Override
|
|
67
|
+
public void nextFile()
|
|
68
|
+
{
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
@Override
|
|
72
|
+
public void add(Buffer buffer)
|
|
73
|
+
{
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
@Override
|
|
77
|
+
public void finish()
|
|
78
|
+
{
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@Override
|
|
82
|
+
public void close()
|
|
83
|
+
{
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
@Override
|
|
87
|
+
public void abort()
|
|
88
|
+
{
|
|
89
|
+
transactionCompleted = false;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
@Override
|
|
93
|
+
public TaskReport commit()
|
|
94
|
+
{
|
|
95
|
+
transactionCompleted = true;
|
|
96
|
+
return Exec.newTaskReport();
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
@Test
|
|
103
|
+
public void testMockFormatterIteration()
|
|
104
|
+
{
|
|
105
|
+
MockFileOutputPlugin fileOutputPlugin = new MockFileOutputPlugin();
|
|
106
|
+
final FileOutputRunner runner = new FileOutputRunner(fileOutputPlugin);
|
|
107
|
+
|
|
108
|
+
ImmutableList<ImmutableMap<String, Object>> columns = ImmutableList.of(
|
|
109
|
+
ImmutableMap.<String,Object>of("name", "col1", "type", "boolean", "option", ImmutableMap.of()),
|
|
110
|
+
ImmutableMap.<String,Object>of("name", "col2", "type", "long", "option", ImmutableMap.of()),
|
|
111
|
+
ImmutableMap.<String,Object>of("name", "col3", "type", "double", "option", ImmutableMap.of()),
|
|
112
|
+
ImmutableMap.<String,Object>of("name", "col4", "type", "string", "option", ImmutableMap.of()),
|
|
113
|
+
ImmutableMap.<String,Object>of("name", "col5", "type", "timestamp", "option", ImmutableMap.of()));
|
|
114
|
+
ConfigSource config = Exec
|
|
115
|
+
.newConfigSource()
|
|
116
|
+
.set("type", "unused?")
|
|
117
|
+
.set("formatter",
|
|
118
|
+
ImmutableMap.of("type", "mock", "columns", columns));
|
|
119
|
+
final Schema schema = config.getNested("formatter")
|
|
120
|
+
.loadConfig(MockParserPlugin.PluginTask.class)
|
|
121
|
+
.getSchemaConfig().toSchema();
|
|
122
|
+
|
|
123
|
+
runner.transaction(config, schema, 1, new OutputPlugin.Control()
|
|
124
|
+
{
|
|
125
|
+
public List<TaskReport> run(final TaskSource outputTask)
|
|
126
|
+
{
|
|
127
|
+
TransactionalPageOutput tran = runner.open(outputTask, schema,
|
|
128
|
+
1);
|
|
129
|
+
boolean committed = false;
|
|
130
|
+
try {
|
|
131
|
+
for (Page page : PageTestUtils.buildPage(
|
|
132
|
+
runtime.getBufferAllocator(), schema, true, 2L,
|
|
133
|
+
3.0D, "45", Timestamp.ofEpochMilli(678L), true, 2L,
|
|
134
|
+
3.0D, "45", Timestamp.ofEpochMilli(678L))) {
|
|
135
|
+
tran.add(page);
|
|
136
|
+
}
|
|
137
|
+
tran.commit();
|
|
138
|
+
committed = true;
|
|
139
|
+
} finally {
|
|
140
|
+
if (!committed) {
|
|
141
|
+
tran.abort();
|
|
142
|
+
}
|
|
143
|
+
tran.close();
|
|
144
|
+
}
|
|
145
|
+
return new ArrayList<TaskReport>();
|
|
146
|
+
}
|
|
147
|
+
});
|
|
148
|
+
|
|
149
|
+
assertEquals(true, fileOutputPlugin.transactionCompleted);
|
|
150
|
+
assertEquals(2, MockFormatterPlugin.records.size());
|
|
151
|
+
for (List<Object> record : MockFormatterPlugin.records) {
|
|
152
|
+
assertEquals(Boolean.TRUE, record.get(0));
|
|
153
|
+
assertEquals(2L, record.get(1));
|
|
154
|
+
assertEquals(3.0D, (Double) record.get(2), 0.1D);
|
|
155
|
+
assertEquals("45", record.get(3));
|
|
156
|
+
assertEquals(678L, ((Timestamp) record.get(4)).toEpochMilli());
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
@Test
|
|
161
|
+
public void testTransactionAborted()
|
|
162
|
+
{
|
|
163
|
+
MockFileOutputPlugin fileOutputPlugin = new MockFileOutputPlugin();
|
|
164
|
+
final FileOutputRunner runner = new FileOutputRunner(fileOutputPlugin);
|
|
165
|
+
|
|
166
|
+
ImmutableList<ImmutableMap<String, Object>> columns = ImmutableList.of(
|
|
167
|
+
ImmutableMap.<String,Object>of("name", "col1", "type", "boolean", "option", ImmutableMap.of()),
|
|
168
|
+
ImmutableMap.<String,Object>of("name", "col2", "type", "long", "option", ImmutableMap.of()),
|
|
169
|
+
ImmutableMap.<String,Object>of("name", "col3", "type", "double", "option", ImmutableMap.of()),
|
|
170
|
+
ImmutableMap.<String,Object>of("name", "col4", "type", "string", "option", ImmutableMap.of()),
|
|
171
|
+
ImmutableMap.<String,Object>of("name", "col5", "type", "timestamp", "option", ImmutableMap.of()));
|
|
172
|
+
ConfigSource config = Exec
|
|
173
|
+
.newConfigSource()
|
|
174
|
+
.set("type", "unused?")
|
|
175
|
+
.set("formatter",
|
|
176
|
+
ImmutableMap.of("type", "mock", "columns", columns));
|
|
177
|
+
final Schema schema = config.getNested("formatter")
|
|
178
|
+
.loadConfig(MockParserPlugin.PluginTask.class)
|
|
179
|
+
.getSchemaConfig().toSchema();
|
|
180
|
+
|
|
181
|
+
try {
|
|
182
|
+
runner.transaction(config, schema, 1, new OutputPlugin.Control()
|
|
183
|
+
{
|
|
184
|
+
public List<TaskReport> run(final TaskSource outputTask)
|
|
185
|
+
{
|
|
186
|
+
TransactionalPageOutput tran = runner.open(outputTask,
|
|
187
|
+
schema, 1);
|
|
188
|
+
boolean committed = false;
|
|
189
|
+
try {
|
|
190
|
+
tran.add(null);
|
|
191
|
+
tran.commit();
|
|
192
|
+
committed = true;
|
|
193
|
+
} finally {
|
|
194
|
+
if (!committed) {
|
|
195
|
+
tran.abort();
|
|
196
|
+
}
|
|
197
|
+
tran.close();
|
|
198
|
+
}
|
|
199
|
+
return new ArrayList<TaskReport>();
|
|
200
|
+
}
|
|
201
|
+
});
|
|
202
|
+
} catch (NullPointerException npe) {
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
assertEquals(false, fileOutputPlugin.transactionCompleted);
|
|
206
|
+
}
|
|
207
|
+
}
|