1818package org .apache .beam .sdk .io .jdbc .providers ;
1919
2020import static org .apache .beam .sdk .io .jdbc .JdbcUtil .MYSQL ;
21+ import static org .apache .beam .sdk .util .construction .BeamUrns .getUrn ;
2122
2223import com .google .auto .service .AutoService ;
24+ import org .apache .beam .model .pipeline .v1 .ExternalTransforms ;
2325import org .apache .beam .sdk .io .jdbc .JdbcReadSchemaTransformProvider ;
26+ import org .apache .beam .sdk .schemas .transforms .SchemaTransform ;
2427import org .apache .beam .sdk .schemas .transforms .SchemaTransformProvider ;
2528import org .checkerframework .checker .initialization .qual .Initialized ;
2629import org .checkerframework .checker .nullness .qual .NonNull ;
2730import org .checkerframework .checker .nullness .qual .UnknownKeyFor ;
31+ import org .slf4j .Logger ;
32+ import org .slf4j .LoggerFactory ;
2833
2934@ AutoService (SchemaTransformProvider .class )
3035public class ReadFromMySqlSchemaTransformProvider extends JdbcReadSchemaTransformProvider {
3136
37+ private static final Logger LOG =
38+ LoggerFactory .getLogger (ReadFromMySqlSchemaTransformProvider .class );
39+
3240 @ Override
3341 public @ UnknownKeyFor @ NonNull @ Initialized String identifier () {
34- return "beam:schematransform:org.apache.beam:mysql_read:v1" ;
42+ return getUrn ( ExternalTransforms . ManagedTransforms . Urns . MYSQL_READ ) ;
3543 }
3644
3745 @ Override
@@ -43,4 +51,25 @@ public String description() {
4351 protected String jdbcType () {
4452 return MYSQL ;
4553 }
54+
55+ @ Override
56+ public @ UnknownKeyFor @ NonNull @ Initialized SchemaTransform from (
57+ JdbcReadSchemaTransformConfiguration configuration ) {
58+ String jdbcType = configuration .getJdbcType ();
59+ if (jdbcType != null && !jdbcType .equals (jdbcType ())) {
60+ throw new IllegalArgumentException (
61+ String .format ("Wrong JDBC type. Expected '%s' but got '%s'" , jdbcType (), jdbcType ));
62+ }
63+
64+ Integer fetchSize = configuration .getFetchSize ();
65+ if (fetchSize != null
66+ && fetchSize > 0
67+ && configuration .getJdbcUrl () != null
68+ && !configuration .getJdbcUrl ().contains ("useCursorFetch=true" )) {
69+ LOG .warn (
70+ "The fetchSize option is ignored. It is required to set useCursorFetch=true"
71+ + " in the JDBC URL when using fetchSize for MySQL" );
72+ }
73+ return super .from (configuration );
74+ }
4675}
0 commit comments