Coverage Report

Created: 2022-08-24 06:40

/src/duckdb/src/common/printer.cpp
Line
Count
Source (jump to first uncovered line)
1
#include "duckdb/common/printer.hpp"
2
#include "duckdb/common/progress_bar.hpp"
3
#include "duckdb/common/windows_util.hpp"
4
#include "duckdb/common/windows.hpp"
5
#include <stdio.h>
6
7
#ifndef DUCKDB_DISABLE_PRINT
8
#ifdef DUCKDB_WINDOWS
9
#include <io.h>
10
#endif
11
#endif
12
13
namespace duckdb {
14
15
// LCOV_EXCL_START
16
0
void Printer::Print(const string &str) {
17
0
#ifndef DUCKDB_DISABLE_PRINT
18
#ifdef DUCKDB_WINDOWS
19
  if (IsTerminal()) {
20
    // print utf8 to terminal
21
    auto unicode = WindowsUtil::UTF8ToMBCS(str.c_str());
22
    fprintf(stderr, "%s\n", unicode.c_str());
23
    return;
24
  }
25
#endif
26
0
  fprintf(stderr, "%s\n", str.c_str());
27
0
#endif
28
0
}
29
30
0
void Printer::PrintProgress(int percentage, const char *pbstr, int pbwidth) {
31
0
#ifndef DUCKDB_DISABLE_PRINT
32
0
  int lpad = (int)(percentage / 100.0 * pbwidth);
33
0
  int rpad = pbwidth - lpad;
34
0
  printf("\r%3d%% [%.*s%*s]", percentage, lpad, pbstr, rpad, "");
35
0
  fflush(stdout);
36
0
#endif
37
0
}
38
39
0
void Printer::FinishProgressBarPrint(const char *pbstr, int pbwidth) {
40
0
#ifndef DUCKDB_DISABLE_PRINT
41
0
  PrintProgress(100, pbstr, pbwidth);
42
0
  printf(" \n");
43
0
  fflush(stdout);
44
0
#endif
45
0
}
46
47
0
bool Printer::IsTerminal() {
48
0
#ifndef DUCKDB_DISABLE_PRINT
49
#ifdef DUCKDB_WINDOWS
50
  return GetFileType(GetStdHandle(STD_ERROR_HANDLE)) == FILE_TYPE_CHAR;
51
#else
52
0
  throw InternalException("IsTerminal is only implemented for Windows");
53
0
#endif
54
0
#endif
55
0
  return false;
56
0
}
57
// LCOV_EXCL_STOP
58
59
} // namespace duckdb