Skip to content

Reduce archive size #498

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 4 commits into from
Feb 9, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
# 1.2.8
* Reduce archive size by removing unnecessary dependencies from the jar
* Fix NPE on V1 client when Clickhouse has table with Array(Nested...) field

# 1.2.7
Expand Down
5 changes: 0 additions & 5 deletions build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -72,13 +72,9 @@ dependencies {
implementation("com.clickhouse:clickhouse-http-client:${project.extra["clickHouseDriverVersion"]}")
implementation("com.clickhouse:clickhouse-data:${project.extra["clickHouseDriverVersion"]}")
implementation("com.clickhouse:client-v2:${project.extra["clickHouseDriverVersion"]}")
implementation("io.projectreactor:reactor-core:3.7.0")
implementation("com.google.code.gson:gson:2.11.0")
// https://mvnrepository.com/artifact/org.apache.httpcomponents.client5/httpclient5
implementation("org.apache.httpcomponents.client5:httpclient5:5.3.1")
// https://mvnrepository.com/artifact/com.google.guava/guava
implementation("com.google.guava:guava:33.3.1-jre")


// Avoid telescoping constructors problem with the builder pattern using Lombok
compileOnly("org.projectlombok:lombok:1.18.34")
Expand All @@ -100,7 +96,6 @@ dependencies {
Will in side the Confluent Archive
*/
clickhouseDependencies("org.apache.httpcomponents.client5:httpclient5:5.3.1")
clickhouseDependencies("io.lettuce:lettuce-core:6.5.0.RELEASE")
clickhouseDependencies("com.clickhouse:clickhouse-client:${project.extra["clickHouseDriverVersion"]}")
clickhouseDependencies("com.clickhouse:client-v2:${project.extra["clickHouseDriverVersion"]}")
clickhouseDependencies("com.clickhouse:clickhouse-http-client:${project.extra["clickHouseDriverVersion"]}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,9 +8,9 @@
import lombok.experimental.Accessors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import reactor.util.function.Tuple2;
import reactor.util.function.Tuple3;
import reactor.util.function.Tuples;
import com.clickhouse.kafka.connect.util.reactor.function.Tuple2;
import com.clickhouse.kafka.connect.util.reactor.function.Tuple3;
import com.clickhouse.kafka.connect.util.reactor.function.Tuples;

import java.util.ArrayList;
import java.util.Comparator;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,169 @@
package com.clickhouse.kafka.connect.util.reactor.function;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Objects;
import java.util.function.Function;

/**
* A tuple that holds two non-null values.
*
* @param <T1> The type of the first non-null value held by this tuple
* @param <T2> The type of the second non-null value held by this tuple
* @author Jon Brisbin
* @author Stephane Maldini
*/
@SuppressWarnings("rawtypes")
public class Tuple2<T1, T2> implements Iterable<Object>, Serializable {

private static final long serialVersionUID = -3518082018884860684L;

final T1 t1;
final T2 t2;

Tuple2(T1 t1, T2 t2) {
this.t1 = Objects.requireNonNull(t1, "t1");
this.t2 = Objects.requireNonNull(t2, "t2");
}

/**
* Type-safe way to get the first object of this {@link Tuples}.
*
* @return The first object
*/
public T1 getT1() {
return t1;
}

/**
* Type-safe way to get the second object of this {@link Tuples}.
*
* @return The second object
*/
public T2 getT2() {
return t2;
}

/**
* Map the left-hand part (T1) of this {@link reactor.util.function.Tuple2} into a different value and type,
* keeping the right-hand part (T2).
*
* @param mapper the mapping {@link Function} for the left-hand part
* @param <R> the new type for the left-hand part
* @return a new {@link reactor.util.function.Tuple2} with a different left (T1) value
*/
public <R> com.clickhouse.kafka.connect.util.reactor.function.Tuple2<R, T2> mapT1(Function<T1, R> mapper) {
return new com.clickhouse.kafka.connect.util.reactor.function.Tuple2<>(mapper.apply(t1), t2);
}

/**
* Map the right-hand part (T2) of this {@link reactor.util.function.Tuple2} into a different value and type,
* keeping the left-hand part (T1).
*
* @param mapper the mapping {@link Function} for the right-hand part
* @param <R> the new type for the right-hand part
* @return a new {@link reactor.util.function.Tuple2} with a different right (T2) value
*/
public <R> com.clickhouse.kafka.connect.util.reactor.function.Tuple2<T1, R> mapT2(Function<T2, R> mapper) {
return new com.clickhouse.kafka.connect.util.reactor.function.Tuple2<>(t1, mapper.apply(t2));
}

/**
* Get the object at the given index.
*
* @param index The index of the object to retrieve. Starts at 0.
* @return The object or {@literal null} if out of bounds.
*/
public Object get(int index) {
switch (index) {
case 0:
return t1;
case 1:
return t2;
default:
return null;
}
}

/**
* Turn this {@code Tuple} into a {@link List List&lt;Object&gt;}.
* The list isn't tied to this Tuple but is a <strong>copy</strong> with limited
* mutability ({@code add} and {@code remove} are not supported, but {@code set} is).
*
* @return A copy of the tuple as a new {@link List List&lt;Object&gt;}.
*/
public List<Object> toList() {
return Arrays.asList(toArray());
}

/**
* Turn this {@code Tuple} into a plain {@code Object[]}.
* The array isn't tied to this Tuple but is a <strong>copy</strong>.
*
* @return A copy of the tuple as a new {@link Object Object[]}.
*/
public Object[] toArray() {
return new Object[]{t1, t2};
}

/**
* Return an <strong>immutable</strong> {@link Iterator Iterator&lt;Object&gt;} around
* the content of this {@code Tuple}.
*
* @implNote As an {@link Iterator} is always tied to its {@link Iterable} source by
* definition, the iterator cannot be mutable without the iterable also being mutable.
* Since {@link Tuples} are <strong>immutable</strong>, so is the {@link Iterator}
* returned by this method.
*
* @return An unmodifiable {@link Iterator} over the elements in this Tuple.
*/
@Override
public Iterator<Object> iterator() {
return Collections.unmodifiableList(toList()).iterator();
}

@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}

com.clickhouse.kafka.connect.util.reactor.function.Tuple2<?, ?> tuple2 = (com.clickhouse.kafka.connect.util.reactor.function.Tuple2<?, ?>) o;

return t1.equals(tuple2.t1) && t2.equals(tuple2.t2);

}

@Override
public int hashCode() {
int result = size();
result = 31 * result + t1.hashCode();
result = 31 * result + t2.hashCode();
return result;
}

/**
* Return the number of elements in this {@literal Tuples}.
*
* @return The size of this {@literal Tuples}.
*/
public int size() {
return 2;
}

/**
* A Tuple String representation is the comma separated list of values, enclosed
* in square brackets.
* @return the Tuple String representation
*/
@Override
public final String toString() {
return Tuples.tupleStringRepresentation(toArray()).insert(0, '[').append(']').toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
package com.clickhouse.kafka.connect.util.reactor.function;

import java.util.Objects;
import java.util.function.Function;

/**
* A tuple that holds three non-null values.
*
* @param <T1> The type of the first non-null value held by this tuple
* @param <T2> The type of the second non-null value held by this tuple
* @param <T3> The type of the third non-null value held by this tuple
* @author Jon Brisbin
* @author Stephane Maldini
*/
public class Tuple3<T1, T2, T3> extends Tuple2<T1, T2> {

private static final long serialVersionUID = -4430274211524723033L;

final T3 t3;

Tuple3(T1 t1, T2 t2, T3 t3) {
super(t1, t2);
this.t3 = Objects.requireNonNull(t3, "t3");
}

/**
* Type-safe way to get the third object of this {@link Tuples}.
*
* @return The third object
*/
public T3 getT3() {
return t3;
}

/**
* Map the 1st part (T1) of this {@link reactor.util.function.Tuple3} into a different value and type,
* keeping the other parts.
*
* @param mapper the mapping {@link Function} for the T1 part
* @param <R> the new type for the T1 part
* @return a new {@link reactor.util.function.Tuple3} with a different T1 value
*/
public <R> com.clickhouse.kafka.connect.util.reactor.function.Tuple3<R, T2, T3> mapT1(Function<T1, R> mapper) {
return new com.clickhouse.kafka.connect.util.reactor.function.Tuple3<>(mapper.apply(t1), t2, t3);
}

/**
* Map the 2nd part (T2) of this {@link reactor.util.function.Tuple3} into a different value and type,
* keeping the other parts.
*
* @param mapper the mapping {@link Function} for the T2 part
* @param <R> the new type for the T2 part
* @return a new {@link reactor.util.function.Tuple3} with a different T2 value
*/
public <R> com.clickhouse.kafka.connect.util.reactor.function.Tuple3<T1, R, T3> mapT2(Function<T2, R> mapper) {
return new com.clickhouse.kafka.connect.util.reactor.function.Tuple3<>(t1, mapper.apply(t2), t3);
}

/**
* Map the 3rd part (T3) of this {@link reactor.util.function.Tuple3} into a different value and type,
* keeping the other parts.
*
* @param mapper the mapping {@link Function} for the T3 part
* @param <R> the new type for the T3 part
* @return a new {@link reactor.util.function.Tuple3} with a different T3 value
*/
public <R> com.clickhouse.kafka.connect.util.reactor.function.Tuple3<T1, T2, R> mapT3(Function<T3, R> mapper) {
return new com.clickhouse.kafka.connect.util.reactor.function.Tuple3<>(t1, t2, mapper.apply(t3));
}

@Override
public Object get(int index) {
switch (index) {
case 0:
return t1;
case 1:
return t2;
case 2:
return t3;
default:
return null;
}
}

@Override
public Object[] toArray() {
return new Object[]{t1, t2, t3};
}

@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof com.clickhouse.kafka.connect.util.reactor.function.Tuple3)) return false;
if (!super.equals(o)) return false;

@SuppressWarnings("rawtypes")
com.clickhouse.kafka.connect.util.reactor.function.Tuple3 tuple3 = (com.clickhouse.kafka.connect.util.reactor.function.Tuple3) o;

return t3.equals(tuple3.t3);
}

@Override
public int size() {
return 3;
}

@Override
public int hashCode() {
int result = super.hashCode();
result = 31 * result + t3.hashCode();
return result;
}
}
Loading