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,118 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.util.Iterator;
|
|
4
|
+
import java.util.NoSuchElementException;
|
|
5
|
+
import java.io.Reader;
|
|
6
|
+
import java.io.BufferedReader;
|
|
7
|
+
import java.io.InputStreamReader;
|
|
8
|
+
import java.io.IOException;
|
|
9
|
+
import java.nio.charset.Charset;
|
|
10
|
+
import java.nio.charset.CharsetDecoder;
|
|
11
|
+
import java.nio.charset.CodingErrorAction;
|
|
12
|
+
import org.embulk.config.Task;
|
|
13
|
+
import org.embulk.config.Config;
|
|
14
|
+
import org.embulk.config.ConfigDefault;
|
|
15
|
+
import org.embulk.spi.FileInput;
|
|
16
|
+
|
|
17
|
+
public class LineDecoder
|
|
18
|
+
implements AutoCloseable, Iterable<String>
|
|
19
|
+
{
|
|
20
|
+
// TODO optimize
|
|
21
|
+
|
|
22
|
+
public static interface DecoderTask
|
|
23
|
+
extends Task
|
|
24
|
+
{
|
|
25
|
+
@Config("charset")
|
|
26
|
+
@ConfigDefault("\"utf-8\"")
|
|
27
|
+
public Charset getCharset();
|
|
28
|
+
|
|
29
|
+
@Config("newline")
|
|
30
|
+
@ConfigDefault("\"CRLF\"")
|
|
31
|
+
public Newline getNewline();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
private final FileInputInputStream inputStream;
|
|
35
|
+
private final BufferedReader reader;
|
|
36
|
+
|
|
37
|
+
public LineDecoder(FileInput in, DecoderTask task)
|
|
38
|
+
{
|
|
39
|
+
CharsetDecoder decoder = task.getCharset()
|
|
40
|
+
.newDecoder()
|
|
41
|
+
.onMalformedInput(CodingErrorAction.REPLACE) // TODO configurable?
|
|
42
|
+
.onUnmappableCharacter(CodingErrorAction.REPLACE); // TODO configurable?
|
|
43
|
+
this.inputStream = new FileInputInputStream(in);
|
|
44
|
+
this.reader = new BufferedReader(new InputStreamReader(inputStream, decoder));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
public boolean nextFile()
|
|
48
|
+
{
|
|
49
|
+
return inputStream.nextFile();
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
public String poll()
|
|
53
|
+
{
|
|
54
|
+
try {
|
|
55
|
+
return reader.readLine();
|
|
56
|
+
} catch (IOException ex) {
|
|
57
|
+
// unexpected
|
|
58
|
+
throw new RuntimeException(ex);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public void close()
|
|
63
|
+
{
|
|
64
|
+
try {
|
|
65
|
+
reader.close();
|
|
66
|
+
} catch (IOException ex) {
|
|
67
|
+
// unexpected
|
|
68
|
+
throw new RuntimeException(ex);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
public Iterator<String> iterator()
|
|
73
|
+
{
|
|
74
|
+
return new Ite(this);
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private String nextLine;
|
|
78
|
+
|
|
79
|
+
private static class Ite
|
|
80
|
+
implements Iterator<String>
|
|
81
|
+
{
|
|
82
|
+
private LineDecoder self;
|
|
83
|
+
|
|
84
|
+
public Ite(LineDecoder self)
|
|
85
|
+
{
|
|
86
|
+
// TODO non-static inner class causes a problem with JRuby
|
|
87
|
+
this.self = self;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
@Override
|
|
91
|
+
public boolean hasNext()
|
|
92
|
+
{
|
|
93
|
+
if (self.nextLine != null) {
|
|
94
|
+
return true;
|
|
95
|
+
} else {
|
|
96
|
+
self.nextLine = self.poll();
|
|
97
|
+
return self.nextLine != null;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
@Override
|
|
102
|
+
public String next()
|
|
103
|
+
{
|
|
104
|
+
if (!hasNext()) {
|
|
105
|
+
throw new NoSuchElementException();
|
|
106
|
+
}
|
|
107
|
+
String l = self.nextLine;
|
|
108
|
+
self.nextLine = null;
|
|
109
|
+
return l;
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@Override
|
|
113
|
+
public void remove()
|
|
114
|
+
{
|
|
115
|
+
throw new UnsupportedOperationException();
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
}
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.io.Writer;
|
|
4
|
+
import java.io.BufferedWriter;
|
|
5
|
+
import java.io.OutputStreamWriter;
|
|
6
|
+
import java.io.IOException;
|
|
7
|
+
import java.nio.charset.Charset;
|
|
8
|
+
import java.nio.charset.CharsetEncoder;
|
|
9
|
+
import java.nio.charset.CodingErrorAction;
|
|
10
|
+
import org.embulk.config.Task;
|
|
11
|
+
import org.embulk.config.Config;
|
|
12
|
+
import org.embulk.config.ConfigInject;
|
|
13
|
+
import org.embulk.config.ConfigDefault;
|
|
14
|
+
import org.embulk.spi.FileOutput;
|
|
15
|
+
import org.embulk.spi.BufferAllocator;
|
|
16
|
+
|
|
17
|
+
public class LineEncoder
|
|
18
|
+
implements AutoCloseable
|
|
19
|
+
{
|
|
20
|
+
// TODO optimize
|
|
21
|
+
|
|
22
|
+
public interface EncoderTask
|
|
23
|
+
extends Task
|
|
24
|
+
{
|
|
25
|
+
@Config("charset")
|
|
26
|
+
@ConfigDefault("\"utf-8\"")
|
|
27
|
+
public Charset getCharset();
|
|
28
|
+
|
|
29
|
+
@Config("newline")
|
|
30
|
+
@ConfigDefault("\"CRLF\"")
|
|
31
|
+
public Newline getNewline();
|
|
32
|
+
|
|
33
|
+
@ConfigInject
|
|
34
|
+
public BufferAllocator getBufferAllocator();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
private final String newline;
|
|
38
|
+
private final FileOutput underlyingFileOutput;
|
|
39
|
+
private final FileOutputOutputStream outputStream;
|
|
40
|
+
private Writer writer;
|
|
41
|
+
|
|
42
|
+
public LineEncoder(FileOutput out, EncoderTask task)
|
|
43
|
+
{
|
|
44
|
+
CharsetEncoder encoder = task.getCharset()
|
|
45
|
+
.newEncoder()
|
|
46
|
+
.onMalformedInput(CodingErrorAction.REPLACE) // TODO configurable?
|
|
47
|
+
.onUnmappableCharacter(CodingErrorAction.REPLACE); // TODO configurable?
|
|
48
|
+
this.newline = task.getNewline().getString();
|
|
49
|
+
this.underlyingFileOutput = out;
|
|
50
|
+
this.outputStream = new FileOutputOutputStream(underlyingFileOutput, task.getBufferAllocator(), FileOutputOutputStream.CloseMode.FLUSH_FINISH);
|
|
51
|
+
this.writer = new BufferedWriter(new OutputStreamWriter(outputStream, encoder), 32*1024);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public void addNewLine()
|
|
55
|
+
{
|
|
56
|
+
try {
|
|
57
|
+
writer.append(newline);
|
|
58
|
+
} catch (IOException ex) {
|
|
59
|
+
// unexpected
|
|
60
|
+
throw new RuntimeException(ex);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public void addLine(String line)
|
|
65
|
+
{
|
|
66
|
+
try {
|
|
67
|
+
writer.append(line);
|
|
68
|
+
} catch (IOException ex) {
|
|
69
|
+
// unexpected
|
|
70
|
+
throw new RuntimeException(ex);
|
|
71
|
+
}
|
|
72
|
+
addNewLine();
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
public void addText(String text)
|
|
76
|
+
{
|
|
77
|
+
try {
|
|
78
|
+
writer.append(text);
|
|
79
|
+
} catch (IOException ex) {
|
|
80
|
+
// unexpected
|
|
81
|
+
throw new RuntimeException(ex);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
public void nextFile()
|
|
86
|
+
{
|
|
87
|
+
try {
|
|
88
|
+
writer.flush();
|
|
89
|
+
} catch (IOException ex) {
|
|
90
|
+
// unexpected
|
|
91
|
+
throw new RuntimeException(ex);
|
|
92
|
+
}
|
|
93
|
+
outputStream.nextFile();
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
public void finish()
|
|
97
|
+
{
|
|
98
|
+
try {
|
|
99
|
+
if (writer != null) {
|
|
100
|
+
writer.close(); // FLUSH_FINISH
|
|
101
|
+
writer = null;
|
|
102
|
+
// underlyingFileOutput.finish() is already called by close() because CloseMode is FLUSH_FINISH
|
|
103
|
+
}
|
|
104
|
+
} catch (IOException ex) {
|
|
105
|
+
throw new RuntimeException(ex);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
@Override
|
|
110
|
+
public void close()
|
|
111
|
+
{
|
|
112
|
+
try {
|
|
113
|
+
if (writer != null) {
|
|
114
|
+
writer.close(); // FLUSH_FINISH
|
|
115
|
+
writer = null;
|
|
116
|
+
}
|
|
117
|
+
underlyingFileOutput.close(); // this is necessary because CloseMode is not FLUSH_FINISH_CLOSE
|
|
118
|
+
} catch (IOException ex) {
|
|
119
|
+
// unexpected
|
|
120
|
+
throw new RuntimeException(ex);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
import java.util.Iterator;
|
|
6
|
+
import org.embulk.spi.Buffer;
|
|
7
|
+
import org.embulk.spi.FileInput;
|
|
8
|
+
|
|
9
|
+
public class ListFileInput
|
|
10
|
+
implements FileInput
|
|
11
|
+
{
|
|
12
|
+
private Iterator<? extends Iterable<Buffer>> files;
|
|
13
|
+
private Iterator<Buffer> currentBuffers;
|
|
14
|
+
|
|
15
|
+
public ListFileInput(Iterable<? extends Iterable<Buffer>> files)
|
|
16
|
+
{
|
|
17
|
+
this.files = files.iterator();
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public boolean nextFile()
|
|
21
|
+
{
|
|
22
|
+
if (!files.hasNext()) {
|
|
23
|
+
return false;
|
|
24
|
+
}
|
|
25
|
+
currentBuffers = files.next().iterator();
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public Buffer poll()
|
|
30
|
+
{
|
|
31
|
+
if (currentBuffers == null) {
|
|
32
|
+
throw new IllegalStateException("FileInput.nextFile is not called");
|
|
33
|
+
}
|
|
34
|
+
if (!currentBuffers.hasNext()) {
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
return currentBuffers.next();
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public void close()
|
|
41
|
+
{
|
|
42
|
+
do {
|
|
43
|
+
while (true) {
|
|
44
|
+
Buffer b = poll();
|
|
45
|
+
if (b == null) {
|
|
46
|
+
break;
|
|
47
|
+
}
|
|
48
|
+
b.release();
|
|
49
|
+
}
|
|
50
|
+
} while (nextFile());
|
|
51
|
+
}
|
|
52
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
public enum Newline
|
|
4
|
+
{
|
|
5
|
+
CRLF("\r\n"),
|
|
6
|
+
LF("\n"),
|
|
7
|
+
CR("\r");
|
|
8
|
+
|
|
9
|
+
private final String string;
|
|
10
|
+
private final char firstCharCode;
|
|
11
|
+
private final char secondCharCode;
|
|
12
|
+
|
|
13
|
+
private Newline(String string)
|
|
14
|
+
{
|
|
15
|
+
this.string = string;
|
|
16
|
+
this.firstCharCode = string.charAt(0);
|
|
17
|
+
if (string.length() > 1) {
|
|
18
|
+
this.secondCharCode = string.charAt(1);
|
|
19
|
+
} else {
|
|
20
|
+
this.secondCharCode = 0;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
public String getString()
|
|
25
|
+
{
|
|
26
|
+
return string;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
public char getFirstCharCode()
|
|
30
|
+
{
|
|
31
|
+
return firstCharCode;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
public char getSecondCharCode()
|
|
35
|
+
{
|
|
36
|
+
return secondCharCode;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.io.OutputStream;
|
|
4
|
+
import java.io.Closeable;
|
|
5
|
+
import java.io.IOException;
|
|
6
|
+
import org.embulk.spi.Buffer;
|
|
7
|
+
import org.embulk.spi.FileOutput;
|
|
8
|
+
|
|
9
|
+
public class OutputStreamFileOutput
|
|
10
|
+
implements FileOutput
|
|
11
|
+
{
|
|
12
|
+
public interface Provider extends Closeable
|
|
13
|
+
{
|
|
14
|
+
public OutputStream openNext() throws IOException;
|
|
15
|
+
|
|
16
|
+
public void finish() throws IOException;
|
|
17
|
+
|
|
18
|
+
public void close() throws IOException;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
private final Provider provider;
|
|
22
|
+
private OutputStream current;
|
|
23
|
+
|
|
24
|
+
public OutputStreamFileOutput(Provider provider)
|
|
25
|
+
{
|
|
26
|
+
this.provider = provider;
|
|
27
|
+
this.current = null;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
public void nextFile()
|
|
31
|
+
{
|
|
32
|
+
closeCurrent();
|
|
33
|
+
try {
|
|
34
|
+
current = provider.openNext();
|
|
35
|
+
} catch (IOException ex) {
|
|
36
|
+
throw new RuntimeException(ex);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
public void add(Buffer buffer)
|
|
41
|
+
{
|
|
42
|
+
if (current == null) {
|
|
43
|
+
throw new IllegalStateException("nextFile() must be called before poll()");
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
current.write(buffer.array(), buffer.offset(), buffer.limit());
|
|
47
|
+
} catch (IOException ex) {
|
|
48
|
+
throw new RuntimeException(ex);
|
|
49
|
+
} finally {
|
|
50
|
+
buffer.release();
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
public void finish()
|
|
55
|
+
{
|
|
56
|
+
closeCurrent();
|
|
57
|
+
try {
|
|
58
|
+
provider.finish();
|
|
59
|
+
} catch (IOException ex) {
|
|
60
|
+
throw new RuntimeException(ex);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
public void close()
|
|
65
|
+
{
|
|
66
|
+
try {
|
|
67
|
+
closeCurrent();
|
|
68
|
+
} finally {
|
|
69
|
+
try {
|
|
70
|
+
provider.close();
|
|
71
|
+
} catch (IOException ex) {
|
|
72
|
+
throw new RuntimeException(ex);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
private void closeCurrent()
|
|
78
|
+
{
|
|
79
|
+
try {
|
|
80
|
+
if (current != null) {
|
|
81
|
+
current.close();
|
|
82
|
+
current = null;
|
|
83
|
+
}
|
|
84
|
+
} catch (IOException ex) {
|
|
85
|
+
throw new RuntimeException(ex);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
package org.embulk.spi.util;
|
|
2
|
+
|
|
3
|
+
import java.util.List;
|
|
4
|
+
import java.util.ArrayList;
|
|
5
|
+
import org.embulk.spi.time.Timestamp;
|
|
6
|
+
import org.embulk.spi.time.TimestampFormatter;
|
|
7
|
+
import org.embulk.spi.Schema;
|
|
8
|
+
import org.embulk.spi.Column;
|
|
9
|
+
import org.embulk.spi.PageReader;
|
|
10
|
+
import org.embulk.spi.ColumnVisitor;
|
|
11
|
+
import org.embulk.spi.type.TimestampType;
|
|
12
|
+
|
|
13
|
+
public class PagePrinter
|
|
14
|
+
{
|
|
15
|
+
private final Schema schema;
|
|
16
|
+
private final TimestampFormatter[] timestampFormatters;
|
|
17
|
+
private final ArrayList<String> record;
|
|
18
|
+
|
|
19
|
+
public PagePrinter(Schema schema, TimestampFormatter.FormatterTask task)
|
|
20
|
+
{
|
|
21
|
+
this.schema = schema;
|
|
22
|
+
this.timestampFormatters = new TimestampFormatter[schema.getColumnCount()];
|
|
23
|
+
for (int i=0; i < timestampFormatters.length; i++) {
|
|
24
|
+
if (schema.getColumnType(i) instanceof TimestampType) {
|
|
25
|
+
TimestampType type = (TimestampType) schema.getColumnType(i);
|
|
26
|
+
timestampFormatters[i] = new TimestampFormatter(type.getFormat(), task);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
this.record = new ArrayList<String>(schema.getColumnCount());
|
|
31
|
+
for (int i=0; i < schema.getColumnCount(); i++) {
|
|
32
|
+
record.add("");
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
public String printRecord(PageReader reader, String delimiter)
|
|
37
|
+
{
|
|
38
|
+
StringBuilder sb = new StringBuilder();
|
|
39
|
+
for (Column c : schema.getColumns()) {
|
|
40
|
+
if (c.getIndex() != 0) {
|
|
41
|
+
sb.append(delimiter);
|
|
42
|
+
}
|
|
43
|
+
sb.append(printColumn(reader, c));
|
|
44
|
+
}
|
|
45
|
+
return sb.toString();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
public List<String> printRecord(PageReader reader)
|
|
49
|
+
{
|
|
50
|
+
for (Column c : schema.getColumns()) {
|
|
51
|
+
record.set(c.getIndex(), printColumn(reader, c));
|
|
52
|
+
}
|
|
53
|
+
return record;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
public String printColumn(PageReader reader, Column column)
|
|
57
|
+
{
|
|
58
|
+
if (reader.isNull(column)) {
|
|
59
|
+
return "";
|
|
60
|
+
}
|
|
61
|
+
ToStringColumnVisitor visitor = new ToStringColumnVisitor(reader);
|
|
62
|
+
column.visit(visitor);
|
|
63
|
+
return visitor.string;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
private class ToStringColumnVisitor
|
|
67
|
+
implements ColumnVisitor
|
|
68
|
+
{
|
|
69
|
+
private final PageReader reader;
|
|
70
|
+
String string = "";
|
|
71
|
+
|
|
72
|
+
public ToStringColumnVisitor(PageReader reader)
|
|
73
|
+
{
|
|
74
|
+
this.reader = reader;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
public void booleanColumn(Column column)
|
|
78
|
+
{
|
|
79
|
+
string = Boolean.toString(reader.getBoolean(column));
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
public void longColumn(Column column)
|
|
83
|
+
{
|
|
84
|
+
string = Long.toString(reader.getLong(column));
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
public void doubleColumn(Column column)
|
|
88
|
+
{
|
|
89
|
+
string = Double.toString(reader.getDouble(column));
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
public void stringColumn(Column column)
|
|
93
|
+
{
|
|
94
|
+
string = reader.getString(column);
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
public void timestampColumn(Column column)
|
|
98
|
+
{
|
|
99
|
+
string = timestampFormatters[column.getIndex()].format(reader.getTimestamp(column));
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|