From 8b1c08134707aa6acfce295ab8b550a443e31d74 Mon Sep 17 00:00:00 2001 From: "Jorge C. Leitao" Date: Thu, 17 Feb 2022 22:44:24 +0000 Subject: [PATCH] Cleanup --- arrow-odbc-integration-testing/Cargo.toml | 2 +- .../docker-compose.yml | 11 --- arrow-odbc-integration-testing/dockerfile | 30 -------- src/io/odbc/deserialize.rs | 76 +++++++++++-------- 4 files changed, 45 insertions(+), 74 deletions(-) delete mode 100644 arrow-odbc-integration-testing/dockerfile diff --git a/arrow-odbc-integration-testing/Cargo.toml b/arrow-odbc-integration-testing/Cargo.toml index 942fafdd577..add16ba5d2d 100644 --- a/arrow-odbc-integration-testing/Cargo.toml +++ b/arrow-odbc-integration-testing/Cargo.toml @@ -8,4 +8,4 @@ edition = "2021" arrow2 = { path = "../", default-features = false, features = ["io_odbc"] } lazy_static = "1.4.0" # Function name macro is used to ensure unique table names in test -stdext = "0.3.1" \ No newline at end of file +stdext = "0.3.1" diff --git a/arrow-odbc-integration-testing/docker-compose.yml b/arrow-odbc-integration-testing/docker-compose.yml index 311fef81cbc..9c344136652 100644 --- a/arrow-odbc-integration-testing/docker-compose.yml +++ b/arrow-odbc-integration-testing/docker-compose.yml @@ -8,14 +8,3 @@ services: environment: - MSSQL_SA_PASSWORD=My@Test@Password1 command: ["/opt/mssql/bin/sqlservr", "--accept-eula", "--reset-sa-password"] - - dev: - build: . - volumes: - - .:/workspace:cached - - # Overrides default command so things don't shut down after the process ends. - command: sleep infinity - - # Runs app on the same network as the database container, allows "forwardPorts" in devcontainer.json function. - network_mode: service:mssql diff --git a/arrow-odbc-integration-testing/dockerfile b/arrow-odbc-integration-testing/dockerfile deleted file mode 100644 index bc25009fde6..00000000000 --- a/arrow-odbc-integration-testing/dockerfile +++ /dev/null @@ -1,30 +0,0 @@ -# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.163.1/containers/debian/.devcontainer/base.Dockerfile - -# [Choice] Debian version: buster, stretch -ARG VARIANT="buster" -FROM mcr.microsoft.com/vscode/devcontainers/base:0-${VARIANT} - -# Install Microsoft ODBC SQL Drivers (msodbcsql17 package) for Debian 10 -# https://docs.microsoft.com/de-de/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-ver15 -RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - -RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list -RUN echo msodbcsql17 msodbcsql/ACCEPT_EULA boolean true | debconf-set-selections - -# [Optional] Uncomment this section to install additional packages. -RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ - && apt-get -y install --no-install-recommends \ - build-essential \ - unixodbc-dev \ - msodbcsql17 - -# Setup cargo and install cargo packages required for tests -USER vscode - -# There is also a rust devcontainer, yet this way we get a toolchain -# which is updatable with rustup. -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- --default-toolchain stable -y - -# We need 'parquet-read' to run the tests. At the moment I do not -# know a way to specify cargo installable executables as build -# dependencies. -RUN /home/vscode/.cargo/bin/cargo install parquet --features cli diff --git a/src/io/odbc/deserialize.rs b/src/io/odbc/deserialize.rs index 6a886d76f3f..a811412b2b3 100644 --- a/src/io/odbc/deserialize.rs +++ b/src/io/odbc/deserialize.rs @@ -28,38 +28,52 @@ pub fn deserialize(column: AnyColumnView, data_type: DataType) -> Box AnyColumnView::Date(_) => todo!(), AnyColumnView::Time(_) => todo!(), AnyColumnView::Timestamp(_) => todo!(), - AnyColumnView::F64(values) => Box::new(p(data_type, values)) as _, - AnyColumnView::F32(values) => Box::new(p(data_type, values)) as _, - AnyColumnView::I8(values) => Box::new(p(data_type, values)) as _, - AnyColumnView::I16(values) => Box::new(p(data_type, values)) as _, - AnyColumnView::I32(values) => Box::new(p(data_type, values)) as _, - AnyColumnView::I64(values) => Box::new(p(data_type, values)) as _, - AnyColumnView::U8(values) => Box::new(p(data_type, values)) as _, + AnyColumnView::F64(values) => Box::new(primitive(data_type, values)) as _, + AnyColumnView::F32(values) => Box::new(primitive(data_type, values)) as _, + AnyColumnView::I8(values) => Box::new(primitive(data_type, values)) as _, + AnyColumnView::I16(values) => Box::new(primitive(data_type, values)) as _, + AnyColumnView::I32(values) => Box::new(primitive(data_type, values)) as _, + AnyColumnView::I64(values) => Box::new(primitive(data_type, values)) as _, + AnyColumnView::U8(values) => Box::new(primitive(data_type, values)) as _, AnyColumnView::Bit(values) => Box::new(bool(data_type, values)) as _, AnyColumnView::NullableDate(_) => todo!(), AnyColumnView::NullableTime(_) => todo!(), AnyColumnView::NullableTimestamp(_) => todo!(), - AnyColumnView::NullableF64(slice) => { - Box::new(p_optional(data_type, slice.values(), slice.indicators())) as _ - } - AnyColumnView::NullableF32(slice) => { - Box::new(p_optional(data_type, slice.values(), slice.indicators())) as _ - } - AnyColumnView::NullableI8(slice) => { - Box::new(p_optional(data_type, slice.values(), slice.indicators())) as _ - } - AnyColumnView::NullableI16(slice) => { - Box::new(p_optional(data_type, slice.values(), slice.indicators())) as _ - } - AnyColumnView::NullableI32(slice) => { - Box::new(p_optional(data_type, slice.values(), slice.indicators())) as _ - } - AnyColumnView::NullableI64(slice) => { - Box::new(p_optional(data_type, slice.values(), slice.indicators())) as _ - } - AnyColumnView::NullableU8(slice) => { - Box::new(p_optional(data_type, slice.values(), slice.indicators())) as _ - } + AnyColumnView::NullableF64(slice) => Box::new(primitive_optional( + data_type, + slice.values(), + slice.indicators(), + )) as _, + AnyColumnView::NullableF32(slice) => Box::new(primitive_optional( + data_type, + slice.values(), + slice.indicators(), + )) as _, + AnyColumnView::NullableI8(slice) => Box::new(primitive_optional( + data_type, + slice.values(), + slice.indicators(), + )) as _, + AnyColumnView::NullableI16(slice) => Box::new(primitive_optional( + data_type, + slice.values(), + slice.indicators(), + )) as _, + AnyColumnView::NullableI32(slice) => Box::new(primitive_optional( + data_type, + slice.values(), + slice.indicators(), + )) as _, + AnyColumnView::NullableI64(slice) => Box::new(primitive_optional( + data_type, + slice.values(), + slice.indicators(), + )) as _, + AnyColumnView::NullableU8(slice) => Box::new(primitive_optional( + data_type, + slice.values(), + slice.indicators(), + )) as _, AnyColumnView::NullableBit(slice) => { Box::new(bool_optional(data_type, slice.values(), slice.indicators())) as _ } @@ -70,11 +84,11 @@ fn bitmap(values: &[isize]) -> Option { MutableBitmap::from_trusted_len_iter(values.iter().map(|x| *x != -1)).into() } -fn p(data_type: DataType, values: &[T]) -> PrimitiveArray { +fn primitive(data_type: DataType, values: &[T]) -> PrimitiveArray { PrimitiveArray::from_data(data_type, values.to_vec().into(), None) } -fn p_optional( +fn primitive_optional( data_type: DataType, values: &[T], indicators: &[isize], @@ -126,8 +140,6 @@ fn binary_generic( values.extend_from_slice(&slice[offset..offset + len]) }); - // this O(N) check is not necessary - (offsets.into(), values.into(), validity.into()) }