sql-splitter 1.8.0

High-performance CLI tool for splitting large SQL dump files into individual table files
Documentation
# Benchmark environment for sql-splitter comparisons
FROM debian:bookworm-slim

ARG RUST_VERSION=1.83.0
ARG GO_VERSION=1.23.4
ARG NODE_VERSION=18

RUN apt-get update && apt-get install -y --no-install-recommends \
    curl \
    ca-certificates \
    build-essential \
    git \
    pkg-config \
    python3 \
    python3-pip \
    hyperfine \
    ruby \
    gawk \
    bc \
    coreutils \
    && rm -rf /var/lib/apt/lists/*

# Install Rust
RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --default-toolchain ${RUST_VERSION}
ENV PATH="/root/.cargo/bin:${PATH}"

# Install Go
RUN curl -fsSL "https://go.dev/dl/go${GO_VERSION}.linux-$(dpkg --print-architecture).tar.gz" | tar -C /usr/local -xz
ENV PATH="/usr/local/go/bin:/root/go/bin:${PATH}"

# Install Node.js
RUN curl -fsSL https://deb.nodesource.com/setup_${NODE_VERSION}.x | bash - \
    && apt-get install -y nodejs \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /build

# Copy sql-splitter source and build
COPY Cargo.toml Cargo.lock ./
COPY src ./src
COPY benches ./benches
COPY crates ./crates
RUN cargo build --release && cp target/release/sql-splitter /usr/local/bin/sql-splitter

# ============================================================
# Competitor Tools
# ============================================================

# 1. kedarvj/mysqldumpsplitter (Bash/awk) - Most popular shell-based tool
RUN curl -sL "https://raw.githubusercontent.com/kedarvj/mysqldumpsplitter/master/mysqldumpsplitter.sh" \
    -o /usr/local/bin/mysqldumpsplitter.sh && \
    chmod +x /usr/local/bin/mysqldumpsplitter.sh

# 2. jasny/mysql_splitdump.sh (csplit-based)
RUN curl -sL "https://gist.githubusercontent.com/jasny/1608062/raw/mysql_splitdump.sh" \
    -o /usr/local/bin/mysql_splitdump.sh && \
    chmod +x /usr/local/bin/mysql_splitdump.sh

# 3. mysqldumpsplit-go (patched fork that fixes deadlock with non-interleaved dumps)
RUN git clone --branch fix/handle-non-interleaved-dumps --depth 1 \
    https://github.com/HelgeSverre/mysqldumpsplit.git /tmp/mysqldumpsplit-go && \
    cd /tmp/mysqldumpsplit-go && go build -o /usr/local/bin/mysqldumpsplit-go . && \
    rm -rf /tmp/mysqldumpsplit-go

# 4. vekexasia/mysqldumpsplit (Node.js)
RUN npm install -g mysqldumpsplit 2>/dev/null || \
    echo "Warning: Node mysqldumpsplit not available on npm"

# 5. davydmaker/sql-dump-splitter (Python)
RUN pip3 install --break-system-packages sql-dump-splitter 2>/dev/null || \
    echo "Warning: sql-dump-splitter not available on pip"

# 6. ripienaar/mysql-dump-split (Ruby)
RUN curl -sL "https://raw.githubusercontent.com/ripienaar/mysql-dump-split/master/split-mysql-dump.rb" \
    -o /usr/local/bin/mysql-dump-split.rb && \
    chmod +x /usr/local/bin/mysql-dump-split.rb 2>/dev/null || \
    echo "Warning: mysql-dump-split script not available"

WORKDIR /workspace

# Copy benchmark scripts
COPY docker/benchmark-runner.sh /usr/local/bin/benchmark-runner
COPY scripts/generate-test-dump.py /usr/local/bin/generate-test-dump.py
RUN chmod +x /usr/local/bin/benchmark-runner

# Cleanup build artifacts
RUN rm -rf /build /root/.cargo/registry /root/.cargo/git /root/go/pkg

ENTRYPOINT ["benchmark-runner"]
CMD ["--help"]