提交 aa05fd8e 编写于 作者: S serge-rider

Data transfer: support document-based export for JSON


Former-commit-id: c670f003
上级 077aefea
/*
* DBeaver - Universal Database Manager
* Copyright (C) 2010-2019 Serge Rider (serge@jkiss.org)
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.jkiss.dbeaver.tools.transfer.stream;
/**
* IDocumentDataExporter.
* Supports export of raw documents.
* For such processors no additional data transofrmation will be performed.
*/
public interface IDocumentDataExporter extends IStreamDataExporter {
}
......@@ -50,6 +50,7 @@ import org.jkiss.utils.Base64;
import org.jkiss.utils.IOUtils;
import java.io.*;
import java.util.Arrays;
import java.util.List;
import java.util.Locale;
import java.util.Map;
......@@ -109,7 +110,11 @@ public class StreamTransferConsumer implements IDataTransferConsumer<StreamConsu
// Prepare columns
columnMetas = DBUtils.getAttributeBindings(session, dataContainer, resultSet.getMeta());
columnBindings = DBUtils.makeLeafAttributeBindings(session, dataContainer, resultSet);
if (processor instanceof IDocumentDataExporter) {
columnBindings = Arrays.asList(columnMetas);
} else {
columnBindings = DBUtils.makeLeafAttributeBindings(session, dataContainer, resultSet);
}
if (!initialized) {
/*// For multi-streams export header only once
......@@ -132,29 +137,34 @@ public class StreamTransferConsumer implements IDataTransferConsumer<StreamConsu
try {
// Get values
Object[] srcRow = DBUtils.fetchRow(session, resultSet, columnMetas);
Object[] targetRow = new Object[columnBindings.size()];
for (int i = 0; i < columnBindings.size(); i++) {
DBDAttributeBinding column = columnBindings.get(i);
Object value = DBUtils.getAttributeValue(column, srcRow);
if (value instanceof DBDContent && !settings.isOutputClipboard()) {
// Check for binary type export
if (!ContentUtils.isTextContent((DBDContent) value)) {
switch (settings.getLobExtractType()) {
case SKIP:
// Set it it null
value = null;
break;
case INLINE:
// Just pass content to exporter
break;
case FILES:
// Save content to file and pass file reference to exporter
value = saveContentToFile(session.getProgressMonitor(), (DBDContent) value);
break;
Object[] targetRow;
if (processor instanceof IDocumentDataExporter) {
targetRow = srcRow;
} else {
targetRow = new Object[columnBindings.size()];
for (int i = 0; i < columnBindings.size(); i++) {
DBDAttributeBinding column = columnBindings.get(i);
Object value = DBUtils.getAttributeValue(column, srcRow);
if (value instanceof DBDContent && !settings.isOutputClipboard()) {
// Check for binary type export
if (!ContentUtils.isTextContent((DBDContent) value)) {
switch (settings.getLobExtractType()) {
case SKIP:
// Set it it null
value = null;
break;
case INLINE:
// Just pass content to exporter
break;
case FILES:
// Save content to file and pass file reference to exporter
value = saveContentToFile(session.getProgressMonitor(), (DBDContent) value);
break;
}
}
}
targetRow[i] = value;
}
targetRow[i] = value;
}
// Export row
processor.exportRow(session, resultSet, targetRow);
......
......@@ -29,6 +29,7 @@ import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.dbeaver.model.exec.DBCResultSet;
import org.jkiss.dbeaver.model.exec.DBCSession;
import org.jkiss.dbeaver.model.runtime.DBRProgressMonitor;
import org.jkiss.dbeaver.tools.transfer.stream.IDocumentDataExporter;
import org.jkiss.dbeaver.tools.transfer.stream.IStreamDataExporterSite;
import org.jkiss.dbeaver.utils.ContentUtils;
import org.jkiss.dbeaver.utils.GeneralUtils;
......@@ -46,7 +47,7 @@ import java.util.List;
/**
* JSON Exporter
*/
public class DataExporterJSON extends StreamExporterAbstract {
public class DataExporterJSON extends StreamExporterAbstract implements IDocumentDataExporter {
public static final String PROP_FORMAT_DATE_ISO = "formatDateISO";
public static final String PROP_PRINT_TABLE_NAME = "printTableName";
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册