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,113 @@
|
|
|
1
|
+
package org.embulk.spi.unit;
|
|
2
|
+
|
|
3
|
+
import java.io.File;
|
|
4
|
+
import java.io.ByteArrayOutputStream;
|
|
5
|
+
import java.io.IOException;
|
|
6
|
+
import com.fasterxml.jackson.core.JsonGenerator;
|
|
7
|
+
import com.fasterxml.jackson.core.JsonParser;
|
|
8
|
+
import com.fasterxml.jackson.core.JsonToken;
|
|
9
|
+
import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
10
|
+
import com.fasterxml.jackson.databind.JsonSerializer;
|
|
11
|
+
import com.fasterxml.jackson.databind.JsonDeserializer;
|
|
12
|
+
import com.fasterxml.jackson.databind.SerializerProvider;
|
|
13
|
+
import com.fasterxml.jackson.databind.DeserializationContext;
|
|
14
|
+
import com.fasterxml.jackson.module.guice.ObjectMapperModule;
|
|
15
|
+
|
|
16
|
+
public class LocalFileSerDe
|
|
17
|
+
{
|
|
18
|
+
public static void configure(ObjectMapperModule mapper)
|
|
19
|
+
{
|
|
20
|
+
SimpleModule module = new SimpleModule();
|
|
21
|
+
module.addSerializer(LocalFile.class, new LocalFileSerializer());
|
|
22
|
+
module.addDeserializer(LocalFile.class, new LocalFileDeserializer());
|
|
23
|
+
mapper.registerModule(module);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
private static class LocalFileSerializer
|
|
27
|
+
extends JsonSerializer<LocalFile>
|
|
28
|
+
{
|
|
29
|
+
@Override
|
|
30
|
+
public void serialize(LocalFile value, JsonGenerator jgen, SerializerProvider provider)
|
|
31
|
+
throws IOException
|
|
32
|
+
{
|
|
33
|
+
jgen.writeStartObject();
|
|
34
|
+
jgen.writeFieldName("base64");
|
|
35
|
+
jgen.writeBinary(value.getContent());
|
|
36
|
+
jgen.writeEndObject();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
private static class LocalFileDeserializer
|
|
41
|
+
extends JsonDeserializer<LocalFile>
|
|
42
|
+
{
|
|
43
|
+
private final File tempDir;
|
|
44
|
+
|
|
45
|
+
public LocalFileDeserializer()
|
|
46
|
+
{
|
|
47
|
+
this(new File(System.getProperty("java.io.tmpdir")));
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
public LocalFileDeserializer(File tempDir)
|
|
51
|
+
{
|
|
52
|
+
this.tempDir = tempDir;
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
@Override
|
|
56
|
+
public LocalFile deserialize(JsonParser jp, DeserializationContext ctxt) throws IOException
|
|
57
|
+
{
|
|
58
|
+
JsonToken t = jp.getCurrentToken();
|
|
59
|
+
if (t == JsonToken.START_OBJECT) {
|
|
60
|
+
t = jp.nextToken();
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
switch(t) {
|
|
64
|
+
case VALUE_NULL:
|
|
65
|
+
return null;
|
|
66
|
+
|
|
67
|
+
case FIELD_NAME:
|
|
68
|
+
{
|
|
69
|
+
LocalFile result;
|
|
70
|
+
|
|
71
|
+
String keyName = jp.getCurrentName();
|
|
72
|
+
if ("content".equals(keyName)) {
|
|
73
|
+
jp.nextToken();
|
|
74
|
+
result = LocalFile.ofContent(jp.getValueAsString());
|
|
75
|
+
} else if ("base64".equals(keyName)) {
|
|
76
|
+
jp.nextToken();
|
|
77
|
+
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
|
78
|
+
jp.readBinaryValue(ctxt.getBase64Variant(), out);
|
|
79
|
+
result = LocalFile.ofContent(out.toByteArray());
|
|
80
|
+
} else {
|
|
81
|
+
throw ctxt.mappingException("Unknown key '"+keyName+"' to deserialize LocalFile");
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
t = jp.nextToken();
|
|
85
|
+
if (t != JsonToken.END_OBJECT) {
|
|
86
|
+
throw ctxt.mappingException("Unexpected extra map keys to LocalFile");
|
|
87
|
+
}
|
|
88
|
+
return result;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
case END_OBJECT:
|
|
92
|
+
case START_ARRAY:
|
|
93
|
+
case END_ARRAY:
|
|
94
|
+
throw ctxt.mappingException("Attempted unexpected map or array to LocalFile");
|
|
95
|
+
|
|
96
|
+
case VALUE_EMBEDDED_OBJECT:
|
|
97
|
+
{
|
|
98
|
+
Object obj = jp.getEmbeddedObject();
|
|
99
|
+
if (obj == null) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
if (LocalFile.class.isAssignableFrom(obj.getClass())) {
|
|
103
|
+
return (LocalFile) obj;
|
|
104
|
+
}
|
|
105
|
+
throw ctxt.mappingException("Don't know how to convert embedded Object of type "+obj.getClass().getName()+" into LocalFile");
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
default:
|
|
109
|
+
return LocalFile.of(jp.getValueAsString());
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
package org.embulk.spi.unit;
|
|
2
|
+
|
|
3
|
+
import com.google.common.base.Optional;
|
|
4
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
|
5
|
+
import com.fasterxml.jackson.databind.JsonMappingException;
|
|
6
|
+
import com.fasterxml.jackson.databind.node.NullNode;
|
|
7
|
+
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
8
|
+
import com.fasterxml.jackson.annotation.JsonValue;
|
|
9
|
+
|
|
10
|
+
public class ToString
|
|
11
|
+
{
|
|
12
|
+
private final String string;
|
|
13
|
+
|
|
14
|
+
public ToString(String string)
|
|
15
|
+
{
|
|
16
|
+
this.string = string;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
@JsonCreator
|
|
20
|
+
public ToString(Optional<JsonNode> option) throws JsonMappingException
|
|
21
|
+
{
|
|
22
|
+
JsonNode node = option.or(NullNode.getInstance());
|
|
23
|
+
if (node.isTextual()) {
|
|
24
|
+
this.string = node.textValue();
|
|
25
|
+
} else if (node.isValueNode()) {
|
|
26
|
+
this.string = node.toString();
|
|
27
|
+
} else {
|
|
28
|
+
throw new JsonMappingException(String.format("Arrays and objects are invalid: '%s'", node));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
@Override
|
|
33
|
+
public boolean equals(Object obj)
|
|
34
|
+
{
|
|
35
|
+
if (!(obj instanceof ToString)) {
|
|
36
|
+
return false;
|
|
37
|
+
}
|
|
38
|
+
ToString o = (ToString) obj;
|
|
39
|
+
return string.equals(o.string);
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
@Override
|
|
43
|
+
public int hashCode()
|
|
44
|
+
{
|
|
45
|
+
return string.hashCode();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
@JsonValue
|
|
49
|
+
@Override
|
|
50
|
+
public String toString()
|
|
51
|
+
{
|
|
52
|
+
return string;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
package org.embulk.spi.unit;
|
|
2
|
+
|
|
3
|
+
import java.util.Map;
|
|
4
|
+
import java.util.HashMap;
|
|
5
|
+
import java.util.Properties;
|
|
6
|
+
import com.google.common.base.Function;
|
|
7
|
+
import com.google.common.collect.Maps;
|
|
8
|
+
import com.fasterxml.jackson.annotation.JsonCreator;
|
|
9
|
+
|
|
10
|
+
public class ToStringMap
|
|
11
|
+
extends HashMap<String, String>
|
|
12
|
+
{
|
|
13
|
+
@JsonCreator
|
|
14
|
+
public ToStringMap(Map<String, ToString> map)
|
|
15
|
+
{
|
|
16
|
+
super(Maps.transformValues(map, new Function<ToString, String>() {
|
|
17
|
+
public String apply(ToString value)
|
|
18
|
+
{
|
|
19
|
+
if (value == null) {
|
|
20
|
+
return "null";
|
|
21
|
+
} else {
|
|
22
|
+
return value.toString();
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
public Properties toProperties()
|
|
29
|
+
{
|
|
30
|
+
Properties props = new Properties();
|
|
31
|
+
props.putAll(this);
|
|
32
|
+
return props;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.io.IOException;
|
|
4
|
+
import java.nio.charset.Charset;
|
|
5
|
+
import com.fasterxml.jackson.core.JsonGenerator;
|
|
6
|
+
import com.fasterxml.jackson.databind.module.SimpleModule;
|
|
7
|
+
import com.fasterxml.jackson.databind.SerializerProvider;
|
|
8
|
+
import com.fasterxml.jackson.databind.DeserializationContext;
|
|
9
|
+
import com.fasterxml.jackson.databind.JsonSerializer;
|
|
10
|
+
import com.fasterxml.jackson.databind.JsonMappingException;
|
|
11
|
+
import com.fasterxml.jackson.databind.deser.std.FromStringDeserializer;
|
|
12
|
+
import com.fasterxml.jackson.module.guice.ObjectMapperModule;
|
|
13
|
+
|
|
14
|
+
public class CharsetSerDe
|
|
15
|
+
{
|
|
16
|
+
public static void configure(ObjectMapperModule mapper)
|
|
17
|
+
{
|
|
18
|
+
SimpleModule module = new SimpleModule();
|
|
19
|
+
module.addSerializer(Charset.class, new CharsetSerializer());
|
|
20
|
+
module.addDeserializer(Charset.class, new CharsetDeserializer());
|
|
21
|
+
mapper.registerModule(module);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public static class CharsetSerializer
|
|
25
|
+
extends JsonSerializer<Charset>
|
|
26
|
+
{
|
|
27
|
+
@Override
|
|
28
|
+
public void serialize(Charset value, JsonGenerator jgen, SerializerProvider provider)
|
|
29
|
+
throws IOException
|
|
30
|
+
{
|
|
31
|
+
jgen.writeString(value.name());
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
public static class CharsetDeserializer
|
|
36
|
+
extends FromStringDeserializer<Charset>
|
|
37
|
+
{
|
|
38
|
+
public CharsetDeserializer()
|
|
39
|
+
{
|
|
40
|
+
super(Charset.class);
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
@Override
|
|
44
|
+
protected Charset _deserialize(String value, DeserializationContext context)
|
|
45
|
+
throws JsonMappingException
|
|
46
|
+
{
|
|
47
|
+
try {
|
|
48
|
+
return Charset.forName(value);
|
|
49
|
+
} catch (UnsupportedOperationException ex) {
|
|
50
|
+
// TODO include link to a document to the message for the list of supported time zones
|
|
51
|
+
throw new JsonMappingException(String.format("Unknown charset '%s'", value));
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import com.google.common.collect.ImmutableList;
|
|
5
|
+
import org.embulk.config.TaskSource;
|
|
6
|
+
import org.embulk.config.ConfigSource;
|
|
7
|
+
import org.embulk.plugin.PluginType;
|
|
8
|
+
import org.embulk.spi.ExecSession;
|
|
9
|
+
import org.embulk.spi.FileInput;
|
|
10
|
+
import org.embulk.spi.DecoderPlugin;
|
|
11
|
+
|
|
12
|
+
public abstract class Decoders
|
|
13
|
+
{
|
|
14
|
+
private Decoders() { }
|
|
15
|
+
|
|
16
|
+
public static List<DecoderPlugin> newDecoderPlugins(ExecSession exec, List<ConfigSource> configs)
|
|
17
|
+
{
|
|
18
|
+
ImmutableList.Builder<DecoderPlugin> builder = ImmutableList.builder();
|
|
19
|
+
for (ConfigSource config : configs) {
|
|
20
|
+
builder.add(exec.newPlugin(DecoderPlugin.class, config.get(PluginType.class, "type")));
|
|
21
|
+
}
|
|
22
|
+
return builder.build();
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
public interface Control
|
|
26
|
+
{
|
|
27
|
+
public void run(List<TaskSource> taskSources);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public static void transaction(List<DecoderPlugin> plugins, List<ConfigSource> configs,
|
|
31
|
+
Decoders.Control control)
|
|
32
|
+
{
|
|
33
|
+
new RecursiveControl(plugins, configs, control).transaction();
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public static FileInput open(List<DecoderPlugin> plugins, List<TaskSource> taskSources,
|
|
37
|
+
FileInput input)
|
|
38
|
+
{
|
|
39
|
+
FileInput in = input;
|
|
40
|
+
int pos = 0;
|
|
41
|
+
while (pos < plugins.size()) {
|
|
42
|
+
in = plugins.get(pos).open(taskSources.get(pos), in);
|
|
43
|
+
pos++;
|
|
44
|
+
}
|
|
45
|
+
return in;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
private static class RecursiveControl
|
|
49
|
+
{
|
|
50
|
+
private final List<DecoderPlugin> plugins;
|
|
51
|
+
private final List<ConfigSource> configs;
|
|
52
|
+
private final Decoders.Control finalControl;
|
|
53
|
+
private final ImmutableList.Builder<TaskSource> taskSources;
|
|
54
|
+
private int pos;
|
|
55
|
+
|
|
56
|
+
RecursiveControl(List<DecoderPlugin> plugins, List<ConfigSource> configs,
|
|
57
|
+
Decoders.Control finalControl)
|
|
58
|
+
{
|
|
59
|
+
this.plugins = plugins;
|
|
60
|
+
this.configs = configs;
|
|
61
|
+
this.finalControl = finalControl;
|
|
62
|
+
this.taskSources = ImmutableList.builder();
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
public void transaction()
|
|
66
|
+
{
|
|
67
|
+
if (pos < plugins.size()) {
|
|
68
|
+
plugins.get(pos).transaction(configs.get(pos), new DecoderPlugin.Control() {
|
|
69
|
+
public void run(TaskSource taskSource)
|
|
70
|
+
{
|
|
71
|
+
taskSources.add(taskSource);
|
|
72
|
+
pos++;
|
|
73
|
+
transaction();
|
|
74
|
+
}
|
|
75
|
+
});
|
|
76
|
+
} else {
|
|
77
|
+
finalControl.run(taskSources.build());
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import org.embulk.spi.time.Timestamp;
|
|
4
|
+
|
|
5
|
+
public interface DynamicColumnSetter
|
|
6
|
+
{
|
|
7
|
+
void setNull();
|
|
8
|
+
|
|
9
|
+
void set(boolean value);
|
|
10
|
+
|
|
11
|
+
void set(long value);
|
|
12
|
+
|
|
13
|
+
void set(double value);
|
|
14
|
+
|
|
15
|
+
void set(String value);
|
|
16
|
+
|
|
17
|
+
void set(Timestamp value);
|
|
18
|
+
}
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import org.joda.time.DateTimeZone;
|
|
4
|
+
import org.embulk.config.ConfigSource;
|
|
5
|
+
import org.embulk.spi.type.Type;
|
|
6
|
+
import org.embulk.spi.type.BooleanType;
|
|
7
|
+
import org.embulk.spi.type.LongType;
|
|
8
|
+
import org.embulk.spi.type.DoubleType;
|
|
9
|
+
import org.embulk.spi.type.StringType;
|
|
10
|
+
import org.embulk.spi.type.TimestampType;
|
|
11
|
+
import org.embulk.spi.util.dynamic.BooleanColumnSetter;
|
|
12
|
+
import org.embulk.spi.util.dynamic.LongColumnSetter;
|
|
13
|
+
import org.embulk.spi.util.dynamic.DoubleColumnSetter;
|
|
14
|
+
import org.embulk.spi.util.dynamic.StringColumnSetter;
|
|
15
|
+
import org.embulk.spi.util.dynamic.TimestampColumnSetter;
|
|
16
|
+
import org.embulk.spi.util.dynamic.DefaultValueSetter;
|
|
17
|
+
import org.embulk.spi.util.dynamic.NullDefaultValueSetter;
|
|
18
|
+
import org.embulk.spi.time.TimestampFormatter;
|
|
19
|
+
import org.embulk.spi.time.TimestampParser;
|
|
20
|
+
import org.embulk.spi.time.TimestampFormat;
|
|
21
|
+
import org.embulk.spi.Column;
|
|
22
|
+
import org.embulk.spi.PageBuilder;
|
|
23
|
+
import org.embulk.config.ConfigException;
|
|
24
|
+
|
|
25
|
+
public class DynamicColumnSetterFactory
|
|
26
|
+
{
|
|
27
|
+
private final DefaultValueSetter defaultValue;
|
|
28
|
+
private final DynamicPageBuilder.BuilderTask task;
|
|
29
|
+
|
|
30
|
+
DynamicColumnSetterFactory(
|
|
31
|
+
DynamicPageBuilder.BuilderTask task,
|
|
32
|
+
DefaultValueSetter defaultValue)
|
|
33
|
+
{
|
|
34
|
+
this.defaultValue = defaultValue;
|
|
35
|
+
this.task = task;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
public static DefaultValueSetter nullDefaultValue()
|
|
39
|
+
{
|
|
40
|
+
return new NullDefaultValueSetter();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
public DynamicColumnSetter newColumnSetter(PageBuilder pageBuilder, Column column)
|
|
44
|
+
{
|
|
45
|
+
Type type = column.getType();
|
|
46
|
+
if (type instanceof BooleanType) {
|
|
47
|
+
return new BooleanColumnSetter(pageBuilder, column, defaultValue);
|
|
48
|
+
} else if (type instanceof LongType) {
|
|
49
|
+
return new LongColumnSetter(pageBuilder, column, defaultValue);
|
|
50
|
+
} else if (type instanceof DoubleType) {
|
|
51
|
+
return new DoubleColumnSetter(pageBuilder, column, defaultValue);
|
|
52
|
+
} else if (type instanceof StringType) {
|
|
53
|
+
TimestampFormatter formatter = new TimestampFormatter(task.getJRuby(),
|
|
54
|
+
getTimestampFormat(column).getFormat(), getTimeZone(column));
|
|
55
|
+
return new StringColumnSetter(pageBuilder, column, defaultValue, formatter);
|
|
56
|
+
} else if (type instanceof TimestampType) {
|
|
57
|
+
// TODO use flexible time format like Ruby's Time.parse
|
|
58
|
+
TimestampParser parser = new TimestampParser(task.getJRuby(),
|
|
59
|
+
getTimestampFormat(column).getFormat(), getTimeZone(column));
|
|
60
|
+
return new TimestampColumnSetter(pageBuilder, column, defaultValue, parser);
|
|
61
|
+
}
|
|
62
|
+
throw new ConfigException("Unknown column type: "+type);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
private TimestampFormat getTimestampFormat(Column column)
|
|
66
|
+
{
|
|
67
|
+
DynamicPageBuilder.ColumnOption option = getColumnOption(column);
|
|
68
|
+
if (option != null) {
|
|
69
|
+
return option.getTimestampFormat();
|
|
70
|
+
} else {
|
|
71
|
+
return new TimestampFormat("%Y-%m-%d %H:%M:%S.%6N");
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
private DateTimeZone getTimeZone(Column column)
|
|
76
|
+
{
|
|
77
|
+
DynamicPageBuilder.ColumnOption option = getColumnOption(column);
|
|
78
|
+
if (option != null) {
|
|
79
|
+
return option.getTimeZone().or(task.getDefaultTimeZone());
|
|
80
|
+
} else {
|
|
81
|
+
return task.getDefaultTimeZone();
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
private DynamicPageBuilder.ColumnOption getColumnOption(Column column)
|
|
86
|
+
{
|
|
87
|
+
ConfigSource option = task.getColumnOptions().get(column.getName());
|
|
88
|
+
if (option != null) {
|
|
89
|
+
return option.loadConfig(DynamicPageBuilder.ColumnOption.class);
|
|
90
|
+
} else {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|