Skip to content

Commit c7e7d67

Browse files
authored
Merge branch 'apache:rel/0.12' into rel/0.12
2 parents 5807dec + 6e4381e commit c7e7d67

File tree

145 files changed

+3914
-1633
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+3914
-1633
lines changed

.github/workflows/client.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ jobs:
4747
brew install bison
4848
echo 'export PATH=/usr/local/opt/bison/bin:$PATH' >> ~/.bash_profile
4949
source ~/.bash_profile && export LDFLAGS="-L/usr/local/opt/bison/lib"
50+
brew install openssl
5051
- name: Cache Maven packages
5152
uses: actions/cache@v2
5253
with:

RELEASE_NOTES.md

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,33 @@
2020
2121
-->
2222

23+
# Apache IoTDB 0.12.3
24+
25+
## Bug Fixes
26+
* [IOTDB-1275] Fix backgroup exec for cli -e function causes an infinite loop
27+
* [IOTDB-1287] Fix C++ class Session has 2 useless sort()
28+
* [IOTDB-1289] fix CPP mem-leak in SessionExample.cpp insertRecords()
29+
* [IOTDB-1484] fix auto create schema in cluster
30+
* [IOTDB-1578] Set unsequnce when loading TsFile with the same establish time
31+
* [IOTDB-1619] Fix an error msg when restart iotdb-cluster
32+
* [IOTDB-1629] fix the NPE when using value fill in cluster mode
33+
* [IOTDB-1632] Fix Value fill function fills even when the data exists
34+
* [IOTDB-1659] Fix Windows CLI cannot set maxPRC less than or equal to 0
35+
* [IOTDB-1670] Fix cli -e mode didn't fetch timestamp_precision from server
36+
* [IOTDB-1674] Fix command interpret error causing somaxconn warning failed
37+
* [IOTDB-1677] Fix not generate file apache-iotdb-0.x.x-client-cpp-linux-x86_64-bin.zip.sha512
38+
* [IOTDB-1678] Fix client-cpp session bug: can cause connection leak.
39+
* [IOTDB-1679] client-cpp: Session descontruction need release server resource
40+
* [IOTDB-1690] Fix align by device type cast error
41+
* [IOTDB-1693] fix IoTDB restart does not truncate broken ChunkGroup bug
42+
* [IOTDB-1703] Fix MManager slow recover with tag
43+
* [IOTDB-1723] Fix concurrency issue in compaction selection
44+
* [IOTDB-1726] Wrong hashCode() and equals() method in ChunkMetadata
45+
* [ISSUE-3945] Fix Fuzzy query not support multiDevices and alignByDevice Dataset
46+
* fix merge ClassCastException: MeasurementMNode
47+
* change sync version check to major version
48+
49+
2350
# Apache IoTDB 0.12.2
2451

2552
## New Features

cli/pom.xml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,11 @@
7575
<version>${project.version}</version>
7676
<scope>test</scope>
7777
</dependency>
78+
<dependency>
79+
<groupId>org.apache.commons</groupId>
80+
<artifactId>commons-csv</artifactId>
81+
<version>1.9.0</version>
82+
</dependency>
7883
</dependencies>
7984
<build>
8085
<plugins>

cli/src/main/java/org/apache/iotdb/cli/AbstractCli.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import org.apache.iotdb.exception.ArgsErrorException;
2222
import org.apache.iotdb.jdbc.IoTDBConnection;
2323
import org.apache.iotdb.jdbc.IoTDBJDBCResultSet;
24+
import org.apache.iotdb.rpc.IoTDBConnectionException;
2425
import org.apache.iotdb.rpc.RpcUtils;
2526
import org.apache.iotdb.service.rpc.thrift.ServerProperties;
2627
import org.apache.iotdb.tool.ImportCsv;
@@ -478,8 +479,17 @@ private static void importCmd(String specialCmd, String cmd, IoTDBConnection con
478479
return;
479480
}
480481
println(cmd.split(" ")[1]);
481-
ImportCsv.importCsvFromFile(
482-
host, port, username, password, cmd.split(" ")[1], connection.getTimeZone());
482+
try {
483+
ImportCsv.importFromTargetPath(
484+
host,
485+
Integer.valueOf(port),
486+
username,
487+
password,
488+
cmd.split(" ")[1],
489+
connection.getTimeZone());
490+
} catch (IoTDBConnectionException e) {
491+
e.printStackTrace();
492+
}
483493
}
484494

485495
private static void executeQuery(IoTDBConnection connection, String cmd) {

cli/src/main/java/org/apache/iotdb/tool/AbstractCsvTool.java

Lines changed: 70 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,18 @@
2323
import org.apache.iotdb.rpc.StatementExecutionException;
2424
import org.apache.iotdb.session.Session;
2525

26-
import jline.console.ConsoleReader;
26+
import jline.internal.Nullable;
2727
import org.apache.commons.cli.CommandLine;
2828
import org.apache.commons.cli.Option;
2929
import org.apache.commons.cli.Options;
30+
import org.apache.commons.csv.CSVFormat;
31+
import org.apache.commons.csv.CSVPrinter;
32+
import org.apache.commons.csv.QuoteMode;
3033

3134
import java.io.IOException;
35+
import java.io.PrintWriter;
3236
import java.time.ZoneId;
37+
import java.util.List;
3338

3439
public abstract class AbstractCsvTool {
3540

@@ -55,33 +60,44 @@ public abstract class AbstractCsvTool {
5560
protected static final int MAX_HELP_CONSOLE_WIDTH = 92;
5661
protected static final String[] TIME_FORMAT =
5762
new String[] {"default", "long", "number", "timestamp"};
58-
protected static final String[] STRING_TIME_FORMAT =
63+
public static final String[] STRING_TIME_FORMAT =
5964
new String[] {
60-
"yyyy-MM-dd'T'HH:mm:ss.SSSZ",
61-
"yyyy/MM/dd HH:mm:ss.SSS",
65+
"yyyy-MM-dd HH:mm:ss.SSSX",
66+
"yyyy/MM/dd HH:mm:ss.SSSX",
67+
"yyyy.MM.dd HH:mm:ss.SSSX",
68+
"yyyy-MM-dd HH:mm:ssX",
69+
"yyyy/MM/dd HH:mm:ssX",
70+
"yyyy.MM.dd HH:mm:ssX",
71+
"yyyy-MM-dd HH:mm:ss.SSSz",
72+
"yyyy/MM/dd HH:mm:ss.SSSz",
73+
"yyyy.MM.dd HH:mm:ss.SSSz",
74+
"yyyy-MM-dd HH:mm:ssz",
75+
"yyyy/MM/dd HH:mm:ssz",
76+
"yyyy.MM.dd HH:mm:ssz",
6277
"yyyy-MM-dd HH:mm:ss.SSS",
78+
"yyyy/MM/dd HH:mm:ss.SSS",
6379
"yyyy.MM.dd HH:mm:ss.SSS",
64-
"yyyy/MM/dd'T'HH:mm:ss.SSS",
65-
"yyyy-MM-dd'T'HH:mm:ss.SSS",
66-
"yyyy-MM-dd'T'HH:mm:ss.SSS",
67-
"yyyy.MM.dd'T'HH:mm:ss.SSS",
68-
"yyyy-MM-dd HH:mm:ss.SSSZZ",
69-
"yyyy/MM/dd HH:mm:ss.SSSZZ",
70-
"yyyy.MM.dd HH:mm:ss.SSSZZ",
71-
"yyyy-MM-dd'T'HH:mm:ss.SSSZZ",
72-
"yyyy/MM/dd'T'HH:mm:ss.SSSZZ",
7380
"yyyy-MM-dd HH:mm:ss",
7481
"yyyy/MM/dd HH:mm:ss",
7582
"yyyy.MM.dd HH:mm:ss",
83+
"yyyy-MM-dd'T'HH:mm:ss.SSSX",
84+
"yyyy/MM/dd'T'HH:mm:ss.SSSX",
85+
"yyyy.MM.dd'T'HH:mm:ss.SSSX",
86+
"yyyy-MM-dd'T'HH:mm:ssX",
87+
"yyyy/MM/dd'T'HH:mm:ssX",
88+
"yyyy.MM.dd'T'HH:mm:ssX",
89+
"yyyy-MM-dd'T'HH:mm:ss.SSSz",
90+
"yyyy/MM/dd'T'HH:mm:ss.SSSz",
91+
"yyyy.MM.dd'T'HH:mm:ss.SSSz",
92+
"yyyy-MM-dd'T'HH:mm:ssz",
93+
"yyyy/MM/dd'T'HH:mm:ssz",
94+
"yyyy.MM.dd'T'HH:mm:ssz",
95+
"yyyy-MM-dd'T'HH:mm:ss.SSS",
96+
"yyyy/MM/dd'T'HH:mm:ss.SSS",
97+
"yyyy.MM.dd'T'HH:mm:ss.SSS",
7698
"yyyy-MM-dd'T'HH:mm:ss",
7799
"yyyy/MM/dd'T'HH:mm:ss",
78-
"yyyy.MM.dd'T'HH:mm:ss",
79-
"yyyy-MM-dd HH:mm:ssZZ",
80-
"yyyy/MM/dd HH:mm:ssZZ",
81-
"yyyy.MM.dd HH:mm:ssZZ",
82-
"yyyy-MM-dd'T'HH:mm:ssZZ",
83-
"yyyy/MM/dd'T'HH:mm:ssZZ",
84-
"yyyy.MM.dd'T'HH:mm:ssZZ",
100+
"yyyy.MM.dd'T'HH:mm:ss"
85101
};
86102
protected static String host;
87103
protected static String port;
@@ -93,7 +109,7 @@ public abstract class AbstractCsvTool {
93109
protected static String timeFormat;
94110
protected static Session session;
95111

96-
AbstractCsvTool() {}
112+
public AbstractCsvTool() {}
97113

98114
protected static String checkRequiredArg(String arg, String name, CommandLine commandLine)
99115
throws ArgsErrorException {
@@ -114,16 +130,13 @@ protected static void setTimeZone() throws IoTDBConnectionException, StatementEx
114130
zoneId = ZoneId.of(session.getTimeZone());
115131
}
116132

117-
protected static void parseBasicParams(CommandLine commandLine, ConsoleReader reader)
133+
protected static void parseBasicParams(CommandLine commandLine)
118134
throws ArgsErrorException, IOException {
119135
host = checkRequiredArg(HOST_ARGS, HOST_NAME, commandLine);
120136
port = checkRequiredArg(PORT_ARGS, PORT_NAME, commandLine);
121137
username = checkRequiredArg(USERNAME_ARGS, USERNAME_NAME, commandLine);
122138

123139
password = commandLine.getOptionValue(PASSWORD_ARGS);
124-
if (password == null) {
125-
password = reader.readLine("please input your password:", '\0');
126-
}
127140
}
128141

129142
protected static boolean checkTimeFormat() {
@@ -183,9 +196,40 @@ protected static Options createNewOptions() {
183196
.optionalArg(true)
184197
.argName(PASSWORD_NAME)
185198
.hasArg()
186-
.desc("Password (optional)")
199+
.desc("Password (required)")
187200
.build();
188201
options.addOption(opPassword);
189202
return options;
190203
}
204+
205+
/**
206+
* write data to CSV file.
207+
*
208+
* @param headerNames the header names of CSV file
209+
* @param records the records of CSV file
210+
* @param filePath the directory to save the file
211+
*/
212+
public static Boolean writeCsvFile(
213+
@Nullable List<String> headerNames, List<List<Object>> records, String filePath) {
214+
try {
215+
CSVPrinter printer =
216+
CSVFormat.DEFAULT
217+
.withFirstRecordAsHeader()
218+
.withEscape('\\')
219+
.withQuoteMode(QuoteMode.NONE)
220+
.print(new PrintWriter(filePath));
221+
if (headerNames != null) {
222+
printer.printRecord(headerNames);
223+
}
224+
for (List record : records) {
225+
printer.printRecord(record);
226+
}
227+
printer.flush();
228+
printer.close();
229+
return true;
230+
} catch (IOException e) {
231+
e.printStackTrace();
232+
return false;
233+
}
234+
}
191235
}

0 commit comments

Comments
 (0)