embulk 0.7.0-java
Sign up to get free protection for your applications and to get access to all the features.
- 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,13 @@
|
|
1
|
+
Release 0.6.4
|
2
|
+
==================================
|
3
|
+
|
4
|
+
Built-in plugins
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* ``guess-csv`` keeps existent configurations such as ``null_string`` if they are already set.
|
8
|
+
* ``guess-csv`` skips line if a CSV file is broken rather than falling back to ad-hoc implementation which can't deal with quoted values.
|
9
|
+
* Fixed a problem where ``guess-csv`` can't handle quoted values (@y-ken++)
|
10
|
+
|
11
|
+
Release Date
|
12
|
+
------------------
|
13
|
+
2015-04-21
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Release 0.6.5
|
2
|
+
==================================
|
3
|
+
|
4
|
+
Built-in plugins
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* ``guess-csv`` allows a value looks like a boolean as a column name (@y-ken++)
|
8
|
+
* Fixed a problem where ``guess-csv`` can't handle character encodings other than UTF-8 character encodings (@y-ken++)
|
9
|
+
|
10
|
+
General Changes
|
11
|
+
------------------
|
12
|
+
|
13
|
+
* Fixed 'warning: already initialized constant' warning messages.
|
14
|
+
|
15
|
+
Release Date
|
16
|
+
------------------
|
17
|
+
2015-04-21
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Release 0.6.6
|
2
|
+
==================================
|
3
|
+
|
4
|
+
General Changes
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* Fixed a problem that timestamp format guess code can't guess format if the string includes day of 30 and 31.
|
8
|
+
* ``guess`` and ``preview`` throw NoSampleException with appropriate error message if there are no input tasks.
|
9
|
+
|
10
|
+
Plugin API
|
11
|
+
------------------
|
12
|
+
|
13
|
+
* ``spi.util.InputStreamFileInput#close`` closes currently opened InputStream.
|
14
|
+
|
15
|
+
Release Date
|
16
|
+
------------------
|
17
|
+
2015-05-04
|
@@ -0,0 +1,17 @@
|
|
1
|
+
Release 0.6.7
|
2
|
+
==================================
|
3
|
+
|
4
|
+
Built-in plugins
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* ``guess-csv`` guesses "t" and "f" as a boolean value.
|
8
|
+
|
9
|
+
General Changes
|
10
|
+
------------------
|
11
|
+
|
12
|
+
* Added ``selfupdate`` subcommand. This command updates embulk itself to the released latest version.
|
13
|
+
* Upgraded library dependency of Guice from 3.0 to 4.0.
|
14
|
+
|
15
|
+
Release Date
|
16
|
+
------------------
|
17
|
+
2015-05-06
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Release 0.6.8
|
2
|
+
==================================
|
3
|
+
|
4
|
+
Plugin API
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* Added utility class ``spi.util.ResumableInputStream``
|
8
|
+
* Added utility class ``spi.util.RetryExecutor``
|
9
|
+
|
10
|
+
Built-in plugins
|
11
|
+
------------------
|
12
|
+
|
13
|
+
* ``parser-csv`` rejects rows if one includes too many columns by default. Setting ``allow extra_columns`` option to ``true`` will make the behavior same with before.
|
14
|
+
* ``guess-csv`` guesses ``columns`` option every time.
|
15
|
+
|
16
|
+
General Changes
|
17
|
+
------------------
|
18
|
+
|
19
|
+
* Fixed a problem that IntelliJ IDEA causes problem when it imports embulk source code.
|
20
|
+
* Fixed a problem that transaction silently succeeds when an exception happens after all taks succeeded.
|
21
|
+
|
22
|
+
Release Date
|
23
|
+
------------------
|
24
|
+
2015-05-12
|
@@ -0,0 +1,24 @@
|
|
1
|
+
Release 0.6.9
|
2
|
+
==================================
|
3
|
+
|
4
|
+
Built-in plugins
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* ``formatter-csv`` supports ``quote``, ``quote_policy``, ``escape``, ``newline_in_field``, and ``null_string`` options (@sakama++)
|
8
|
+
|
9
|
+
* ``quote_policy`` controls how to quote values. It can be either of ``ALL`` (quote all values), ``MINIMAL`` (quote if a value includes delimiter or quote character), or ``NONE`` (never quotes).
|
10
|
+
|
11
|
+
* ``escape`` controls how to escape quote character in a quoted string. The default is ``"`` (``"`` will be ``""``). Some applications may set it to ``\`` (``"`` will be ``\"``)
|
12
|
+
|
13
|
+
* ``null_string`` controls how to write NULL values. The default is ``""`` (empty string). You can use any strings such as ``\N`` or ``#N/A``.
|
14
|
+
|
15
|
+
* ``guess-csv`` guesses columns which contain only 0 and 1 in first 32KB as long type rather than boolean type.
|
16
|
+
|
17
|
+
General Changes
|
18
|
+
------------------
|
19
|
+
|
20
|
+
* ``spi.util.LineEncoder`` uses buffered writer. This improves performance of ``formatter-csv`` upto 10%.
|
21
|
+
|
22
|
+
Release Date
|
23
|
+
------------------
|
24
|
+
2015-05-14
|
@@ -0,0 +1,96 @@
|
|
1
|
+
Release 0.7.0
|
2
|
+
==================================
|
3
|
+
|
4
|
+
General Changes
|
5
|
+
------------------
|
6
|
+
|
7
|
+
* Upraded JRuby version to 9.0.0.0. Ruby scripting is compatible with Ruby 2.2 syntax.
|
8
|
+
|
9
|
+
* Added ``embulk migrate <plugin directory>`` subcommand. This command modifies plugin code to use the latest Embulk API.
|
10
|
+
|
11
|
+
* Enambed Liquid template engine. If configuration file name ends with ``.yml.liquid``, embulk embeds environment variables using Liquid template engine.
|
12
|
+
|
13
|
+
* Embulk gem package for JRuby doesn't include JRuby itself any more. Size of a gem package is reduced from 38MB to 7.6MB.
|
14
|
+
|
15
|
+
* Embulk gem is also released for CRuby. This enables us to install ``embulk`` command using ``gem install embulk``.
|
16
|
+
|
17
|
+
* **IMPORTANT**: ``embulk bundle`` command runs bundler. To create a new plugin bundle, use ``embulk bundle new <directory>`` command. To update gems, use ``embulk bundle`` command at the directory. Instructions are written at generated Gemfile file.
|
18
|
+
|
19
|
+
|
20
|
+
Ruby Plugin API
|
21
|
+
------------------
|
22
|
+
|
23
|
+
* Added experimental ``Embulk.setup`` and ``Embulk::Runner``.
|
24
|
+
|
25
|
+
This enables ruby scripts to run embulk easily. This is also good for test code. For example, you can use this code:
|
26
|
+
|
27
|
+
.. code-block:: ruby
|
28
|
+
|
29
|
+
require 'embulk'
|
30
|
+
Embulk.setup
|
31
|
+
Embulk::Runner.run(YAML.load_file("config.yml"))
|
32
|
+
|
33
|
+
* ``embulk new`` generates .ruby-version file with jruby-9.0.0.0 for ruby-based plugins.
|
34
|
+
|
35
|
+
This makes plugin development easy as following:
|
36
|
+
|
37
|
+
.. code-block:: console
|
38
|
+
|
39
|
+
# 1. Create plugin template
|
40
|
+
$ embulk new ruby-parser awesome
|
41
|
+
$ cd embulk-parser-awesome
|
42
|
+
# or upgrade existent plugin: embulk migrate embulk-parser-awesome
|
43
|
+
|
44
|
+
# 2. Install dependency gems including embulk itself at vendor/bundle directory
|
45
|
+
$ bundle install --path vendor/bundle
|
46
|
+
|
47
|
+
# 3. Create an example configuration file
|
48
|
+
$ vi config.yml
|
49
|
+
|
50
|
+
# 4. You can run embulk without building & installing gem
|
51
|
+
$ bundle exec embulk run config.yml
|
52
|
+
|
53
|
+
* Constants defined at ``Embulk::Java`` are deprecated. They're still kept for backward compatibility but will be removed at a future release.
|
54
|
+
|
55
|
+
* Added ``Embulk::Java::Config`` and ``Embulk::SPI`` namespaces to access Java classes.
|
56
|
+
|
57
|
+
|
58
|
+
Java Plugin API
|
59
|
+
------------------
|
60
|
+
|
61
|
+
* **IMPORTANT**: Renamed CommitReport class to TaskReport. Binary backward compatibility is kept so that old plugins built with embulk 0.6.x can run with embulk 0.7.0. But this backward compatibility code will be removed at future release.
|
62
|
+
|
63
|
+
To upgrade your plugin code, you can use ``embulk migrate <plugin directory>`` command.
|
64
|
+
|
65
|
+
* Upgraded gradle version to 2.6. This version supports ``./gradlew -t <task>`` command that watches changes of files and rebuild continuously.
|
66
|
+
|
67
|
+
This makes plugin development easy as following:
|
68
|
+
|
69
|
+
.. code-block:: console
|
70
|
+
|
71
|
+
# 1. Create plugin template
|
72
|
+
$ embulk new java-input awesome
|
73
|
+
$ cd embulk-input-awesome
|
74
|
+
# or upgrade existent plugin: embulk migrate embulk-input-awesome
|
75
|
+
|
76
|
+
# 2. Build code continously
|
77
|
+
$ ./gradlew -t package
|
78
|
+
|
79
|
+
# 3. Create an example configuration file
|
80
|
+
$ vi config.yml
|
81
|
+
|
82
|
+
# 4. Run embulk with -L option
|
83
|
+
$ embulk -L . run config.yml
|
84
|
+
|
85
|
+
* Added ``EmbulkEmbed.Bootstrap`` class to build ``EmbulkEmbed`` instance.
|
86
|
+
|
87
|
+
* Added ``ConfigLoader.fromJsonString(String)`` and ``ConfigLoader.fromYamlString(String)`` methods.
|
88
|
+
|
89
|
+
* Added guess, preview, and run methods at ``EmbulkEmbed`` don't need ExecSession instance any more.
|
90
|
+
|
91
|
+
* EmbulkService is now deprecated. Replacement is EmbulkEmbed.
|
92
|
+
|
93
|
+
|
94
|
+
Release Date
|
95
|
+
------------------
|
96
|
+
2015-08-18
|
@@ -0,0 +1,284 @@
|
|
1
|
+
package org.embulk.standards;
|
2
|
+
|
3
|
+
import com.google.common.base.Optional;
|
4
|
+
import org.embulk.config.Config;
|
5
|
+
import org.embulk.config.ConfigDefault;
|
6
|
+
import org.embulk.spi.time.Timestamp;
|
7
|
+
import org.embulk.spi.time.TimestampFormatter;
|
8
|
+
import org.embulk.config.Task;
|
9
|
+
import org.embulk.config.TaskSource;
|
10
|
+
import org.embulk.config.ConfigSource;
|
11
|
+
import org.embulk.spi.Column;
|
12
|
+
import org.embulk.spi.Schema;
|
13
|
+
import org.embulk.spi.ColumnVisitor;
|
14
|
+
import org.embulk.spi.FormatterPlugin;
|
15
|
+
import org.embulk.spi.Page;
|
16
|
+
import org.embulk.spi.PageOutput;
|
17
|
+
import org.embulk.spi.PageReader;
|
18
|
+
import org.embulk.spi.FileOutput;
|
19
|
+
import org.embulk.spi.util.LineEncoder;
|
20
|
+
import org.embulk.spi.util.Timestamps;
|
21
|
+
|
22
|
+
import org.embulk.spi.util.Newline;
|
23
|
+
import java.util.Map;
|
24
|
+
|
25
|
+
public class CsvFormatterPlugin
|
26
|
+
implements FormatterPlugin
|
27
|
+
{
|
28
|
+
public enum QuotePolicy
|
29
|
+
{
|
30
|
+
ALL("ALL"),
|
31
|
+
MINIMAL("MINIMAL"),
|
32
|
+
NONE("NONE");
|
33
|
+
|
34
|
+
private final String string;
|
35
|
+
|
36
|
+
private QuotePolicy(String string)
|
37
|
+
{
|
38
|
+
this.string = string;
|
39
|
+
}
|
40
|
+
|
41
|
+
public String getString()
|
42
|
+
{
|
43
|
+
return string;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
|
47
|
+
public interface PluginTask
|
48
|
+
extends Task, LineEncoder.EncoderTask, TimestampFormatter.Task
|
49
|
+
{
|
50
|
+
@Config("header_line")
|
51
|
+
@ConfigDefault("true")
|
52
|
+
boolean getHeaderLine();
|
53
|
+
|
54
|
+
@Config("delimiter")
|
55
|
+
@ConfigDefault("\",\"")
|
56
|
+
char getDelimiterChar();
|
57
|
+
|
58
|
+
@Config("quote")
|
59
|
+
@ConfigDefault("\"\\\"\"")
|
60
|
+
char getQuoteChar();
|
61
|
+
|
62
|
+
@Config("quote_policy")
|
63
|
+
@ConfigDefault("\"MINIMAL\"")
|
64
|
+
QuotePolicy getQuotePolicy();
|
65
|
+
|
66
|
+
@Config("escape")
|
67
|
+
@ConfigDefault("null")
|
68
|
+
Optional<Character> getEscapeChar();
|
69
|
+
|
70
|
+
@Config("null_string")
|
71
|
+
@ConfigDefault("\"\"")
|
72
|
+
String getNullString();
|
73
|
+
|
74
|
+
@Config("newline_in_field")
|
75
|
+
@ConfigDefault("\"LF\"")
|
76
|
+
Newline getNewlineInField();
|
77
|
+
|
78
|
+
@Config("column_options")
|
79
|
+
@ConfigDefault("{}")
|
80
|
+
Map<String, TimestampColumnOption> getColumnOptions();
|
81
|
+
}
|
82
|
+
|
83
|
+
public interface TimestampColumnOption
|
84
|
+
extends Task, TimestampFormatter.TimestampColumnOption
|
85
|
+
{ }
|
86
|
+
|
87
|
+
@Override
|
88
|
+
public void transaction(ConfigSource config, Schema schema,
|
89
|
+
FormatterPlugin.Control control)
|
90
|
+
{
|
91
|
+
PluginTask task = config.loadConfig(PluginTask.class);
|
92
|
+
|
93
|
+
// validate column_options
|
94
|
+
for (String columnName : task.getColumnOptions().keySet()) {
|
95
|
+
schema.lookupColumn(columnName); // throws SchemaConfigException
|
96
|
+
}
|
97
|
+
|
98
|
+
control.run(task.dump());
|
99
|
+
}
|
100
|
+
|
101
|
+
@Override
|
102
|
+
public PageOutput open(TaskSource taskSource, final Schema schema,
|
103
|
+
FileOutput output)
|
104
|
+
{
|
105
|
+
final PluginTask task = taskSource.loadTask(PluginTask.class);
|
106
|
+
final LineEncoder encoder = new LineEncoder(output, task);
|
107
|
+
final TimestampFormatter[] timestampFormatters = Timestamps.newTimestampColumnFormatters(task, schema, task.getColumnOptions());
|
108
|
+
final char delimiter = task.getDelimiterChar();
|
109
|
+
final QuotePolicy quotePolicy = task.getQuotePolicy();
|
110
|
+
final char quote = task.getQuoteChar() != '\0' ? task.getQuoteChar() : '"';
|
111
|
+
final char escape = task.getEscapeChar().or(quotePolicy == QuotePolicy.NONE ? '\\' : '\"');
|
112
|
+
final String newlineInField = task.getNewlineInField().getString();
|
113
|
+
final String nullString = task.getNullString();
|
114
|
+
|
115
|
+
// create a file
|
116
|
+
encoder.nextFile();
|
117
|
+
|
118
|
+
// write header
|
119
|
+
if (task.getHeaderLine()) {
|
120
|
+
writeHeader(schema, encoder, delimiter, quotePolicy, quote, escape, newlineInField, nullString);
|
121
|
+
}
|
122
|
+
|
123
|
+
return new PageOutput() {
|
124
|
+
private final PageReader pageReader = new PageReader(schema);
|
125
|
+
private final String delimiterString = String.valueOf(delimiter);
|
126
|
+
|
127
|
+
public void add(Page page)
|
128
|
+
{
|
129
|
+
pageReader.setPage(page);
|
130
|
+
while (pageReader.nextRecord()) {
|
131
|
+
schema.visitColumns(new ColumnVisitor() {
|
132
|
+
public void booleanColumn(Column column)
|
133
|
+
{
|
134
|
+
addDelimiter(column);
|
135
|
+
if (!pageReader.isNull(column)) {
|
136
|
+
addValue(Boolean.toString(pageReader.getBoolean(column)));
|
137
|
+
} else {
|
138
|
+
addNullString();
|
139
|
+
}
|
140
|
+
}
|
141
|
+
|
142
|
+
public void longColumn(Column column)
|
143
|
+
{
|
144
|
+
addDelimiter(column);
|
145
|
+
if (!pageReader.isNull(column)) {
|
146
|
+
addValue(Long.toString(pageReader.getLong(column)));
|
147
|
+
} else {
|
148
|
+
addNullString();
|
149
|
+
}
|
150
|
+
}
|
151
|
+
|
152
|
+
public void doubleColumn(Column column)
|
153
|
+
{
|
154
|
+
addDelimiter(column);
|
155
|
+
if (!pageReader.isNull(column)) {
|
156
|
+
addValue(Double.toString(pageReader.getDouble(column)));
|
157
|
+
} else {
|
158
|
+
addNullString();
|
159
|
+
}
|
160
|
+
}
|
161
|
+
|
162
|
+
public void stringColumn(Column column)
|
163
|
+
{
|
164
|
+
addDelimiter(column);
|
165
|
+
if (!pageReader.isNull(column)) {
|
166
|
+
addValue(pageReader.getString(column));
|
167
|
+
} else {
|
168
|
+
addNullString();
|
169
|
+
}
|
170
|
+
}
|
171
|
+
|
172
|
+
public void timestampColumn(Column column)
|
173
|
+
{
|
174
|
+
addDelimiter(column);
|
175
|
+
if (!pageReader.isNull(column)) {
|
176
|
+
Timestamp value = pageReader.getTimestamp(column);
|
177
|
+
addValue(timestampFormatters[column.getIndex()].format(value));
|
178
|
+
} else {
|
179
|
+
addNullString();
|
180
|
+
}
|
181
|
+
}
|
182
|
+
|
183
|
+
private void addDelimiter(Column column)
|
184
|
+
{
|
185
|
+
if (column.getIndex() != 0) {
|
186
|
+
encoder.addText(delimiterString);
|
187
|
+
}
|
188
|
+
}
|
189
|
+
|
190
|
+
private void addValue(String v)
|
191
|
+
{
|
192
|
+
encoder.addText(setEscapeAndQuoteValue(v, delimiter, quotePolicy, quote, escape, newlineInField, nullString));
|
193
|
+
}
|
194
|
+
|
195
|
+
private void addNullString()
|
196
|
+
{
|
197
|
+
encoder.addText(nullString);
|
198
|
+
}
|
199
|
+
});
|
200
|
+
encoder.addNewLine();
|
201
|
+
}
|
202
|
+
}
|
203
|
+
|
204
|
+
public void finish()
|
205
|
+
{
|
206
|
+
encoder.finish();
|
207
|
+
}
|
208
|
+
|
209
|
+
public void close()
|
210
|
+
{
|
211
|
+
encoder.close();
|
212
|
+
}
|
213
|
+
};
|
214
|
+
}
|
215
|
+
|
216
|
+
private void writeHeader(Schema schema, LineEncoder encoder, char delimiter, QuotePolicy policy, char quote, char escape, String newline, String nullString)
|
217
|
+
{
|
218
|
+
String delimiterString = String.valueOf(delimiter);
|
219
|
+
for (Column column : schema.getColumns()) {
|
220
|
+
if (column.getIndex() != 0) {
|
221
|
+
encoder.addText(delimiterString);
|
222
|
+
}
|
223
|
+
encoder.addText(setEscapeAndQuoteValue(column.getName(), delimiter, policy, quote, escape, newline, nullString));
|
224
|
+
}
|
225
|
+
encoder.addNewLine();
|
226
|
+
}
|
227
|
+
|
228
|
+
private String setEscapeAndQuoteValue(String v, char delimiter, QuotePolicy policy, char quote, char escape, String newline, String nullString)
|
229
|
+
{
|
230
|
+
StringBuilder escapedValue = new StringBuilder();
|
231
|
+
char previousChar = ' ';
|
232
|
+
|
233
|
+
boolean isRequireQuote = (policy == QuotePolicy.ALL || policy == QuotePolicy.MINIMAL && v.equals(nullString)) ? true : false;
|
234
|
+
|
235
|
+
for (int i = 0; i < v.length(); i++) {
|
236
|
+
char c = v.charAt(i);
|
237
|
+
|
238
|
+
if (c == quote) {
|
239
|
+
escapedValue.append(escape);
|
240
|
+
escapedValue.append(c);
|
241
|
+
isRequireQuote = true;
|
242
|
+
} else if (c == '\r') {
|
243
|
+
if (policy == QuotePolicy.NONE) {
|
244
|
+
escapedValue.append(escape);
|
245
|
+
}
|
246
|
+
escapedValue.append(newline);
|
247
|
+
isRequireQuote = true;
|
248
|
+
} else if (c == '\n') {
|
249
|
+
if (previousChar != '\r') {
|
250
|
+
if (policy == QuotePolicy.NONE) {
|
251
|
+
escapedValue.append(escape);
|
252
|
+
}
|
253
|
+
escapedValue.append(newline);
|
254
|
+
isRequireQuote = true;
|
255
|
+
}
|
256
|
+
} else if (c == delimiter) {
|
257
|
+
if (policy == QuotePolicy.NONE) {
|
258
|
+
escapedValue.append(escape);
|
259
|
+
}
|
260
|
+
escapedValue.append(c);
|
261
|
+
isRequireQuote = true;
|
262
|
+
} else {
|
263
|
+
escapedValue.append(c);
|
264
|
+
}
|
265
|
+
previousChar = c;
|
266
|
+
}
|
267
|
+
|
268
|
+
if (policy != QuotePolicy.NONE && isRequireQuote) {
|
269
|
+
return setQuoteValue(escapedValue.toString(), quote);
|
270
|
+
} else {
|
271
|
+
return escapedValue.toString();
|
272
|
+
}
|
273
|
+
}
|
274
|
+
|
275
|
+
private String setQuoteValue(String v, char quote)
|
276
|
+
{
|
277
|
+
StringBuilder sb = new StringBuilder();
|
278
|
+
sb.append(quote);
|
279
|
+
sb.append(v);
|
280
|
+
sb.append(quote);
|
281
|
+
|
282
|
+
return sb.toString();
|
283
|
+
}
|
284
|
+
}
|