<commit_before>## Scalding JDBC Macros

Provides macros to interop between Scala case classes and relational database / SQL column definitions.

For a case class T, the macro-generated `ColumnDefinitionProvider[T]` provides:
1. `ColumnDefinition`s for the corresponding DB table columns
2. `ResultSetExtractor[T]` for extracting records from a `java.sql.ResultSet` object into objects of type `T`

Also provided are `TupleConverter`, `TupleSetter` and `cascading.tuple.Fields` for use with Cascading.

`DBTypeDescriptor[T]` is the top-level class that contains all of the above.


### Illustration

(in the REPL)

Necessary imports:

    scalding> import com.twitter.scalding.db_
    scalding> import com.twitter.scalding.db.macros._

Case class representing your DB schema:

    scalding> case class ExampleDBRecord(
       |   card_id: Long,
       |   tweet_id: Long,
       |   deleted: Boolean,<commit_msg>readme formatting fix<commit_after>## Scalding JDBC Macros

Provides macros to interop between Scala case classes and relational database / SQL column definitions.

For a case class T, the macro-generated `ColumnDefinitionProvider[T]` provides:

1. `ColumnDefinition`s for the corresponding DB table columns

2. `ResultSetExtractor[T]` for extracting records from `java.sql.ResultSet` into objects of type `T`

Also provided are `TupleConverter`, `TupleSetter` and `cascading.tuple.Fields` for use with Cascading.

`DBTypeDescriptor[T]` is the top-level class that contains all of the above.


### Illustration

(in the REPL)

Necessary imports:

    scalding> import com.twitter.scalding.db_
    scalding> import com.twitter.scalding.db.macros._

Case class representing your DB schema:

    scalding> case class ExampleDBRecord(
       |   card_id: Long,
       |   tweet_id: Long,
       |   deleted: Boolean,
{'fraction_non_alphanumeric': 0.07899067471201317, 'fraction_numerical': 0.0021941854086670325, 'mean_word_length': 4.226361031518625, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 9, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '2858004', 'n_tokens_mistral': 557, 'n_tokens_neox': 525, 'n_words': 197}