#!/bin/bash cd "$(dirname "$0")" function prepareFile(){ path="$1" tmp_path="$(basename "$path")" ( sed -n '/CODE AUTOMATICALLY GENERATED BY genQueryMapper.sh/q;p' "$path" echo -e '\t// DO NOT EDIT BELOW THIS LINE, OR CHANGE THIS COMMENT, CODE AUTOMATICALLY GENERATED BY genQueryMapper.sh\n' ) > "$tmp_path" echo "$tmp_path" } function finishFile(){ path="$1" tmp_path="$(basename "$path")" echo -e "}\n" >> "$tmp_path" mv "$tmp_path" "$path" } result="$(prepareFile "src/main/java/com/moparisthebest/jdbc/ResultSetMapper.java")" # single object types cat src/main/java/com/moparisthebest/jdbc/ResultSetMapper.java | grep public | egrep '(toObject|toSingleMap)\(' | grep ', Calendar cal)' | while read method do #echo "method: $method" method_name=$(echo $method | egrep -o '[^ ]+\(') echo "ResultSetMapper.$method_name)" cat >> "$result" <<EOF $(echo $method | sed "s/, Calendar cal)/)/") return this.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/rs/' -e 's/) {/);/') } EOF done #everything else cat src/main/java/com/moparisthebest/jdbc/ResultSetMapper.java | grep public | grep '(ResultSet rs' | grep ', int arrayMaxLength, Calendar cal)' | while read method do #echo "method: $method" method_name=$(echo $method | egrep -o '[^ ]+\(') echo "ResultSetMapper.$method_name)" for args in '' ', int arrayMaxLength' ', Calendar cal' do cat >> "$result" <<EOF $(echo $method | sed "s/, int arrayMaxLength, Calendar cal)/$args)/") return this.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/rs/' -e 's/) {/);/') } EOF done done finishFile "src/main/java/com/moparisthebest/jdbc/ResultSetMapper.java" query="$(prepareFile "src/main/java/com/moparisthebest/jdbc/QueryMapper.java")" caching_query="$(prepareFile "src/main/java/com/moparisthebest/jdbc/CachingQueryMapper.java")" null_query="$(prepareFile "src/main/java/com/moparisthebest/jdbc/NullQueryMapper.java")" list_query="$(prepareFile "src/main/java/com/moparisthebest/jdbc/ListQueryMapper.java")" cat src/main/java/com/moparisthebest/jdbc/ResultSetMapper.java | grep public | grep '(ResultSet rs' | egrep -v '(int arrayMaxLength|Calendar cal)' | while read method do #echo "method: $method" method_name=$(echo $method | egrep -o '[^ ]+\(') echo "QueryMapper.$method_name)" # QueryMapper.java cat >> "$query" <<EOF $(echo $method | sed -e 's/ResultSet rs/PreparedStatement ps/' -e 's/) {/, final Object... bindObjects) throws SQLException {/') return cm.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/bindExecute(ps, bindObjects)/' -e 's/) {/);/') } $(echo $method | sed -e 's/ResultSet rs/String sql/' -e 's/) {/, final Object... bindObjects) throws SQLException {/') PreparedStatement ps = null; try { ps = conn.prepareStatement(sql); return this.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/ps/' -e 's/) {/, bindObjects);/') } finally { tryClose(ps); } } EOF # CachingQueryMapper.java cat >> "$caching_query" <<EOF @Override $(echo $method | sed -e 's/ResultSet rs/String sql/' -e 's/) {/, final Object... bindObjects) throws SQLException {/') return super.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/getPreparedStatement(sql)/' -e 's/) {/, bindObjects);/') } EOF # NullQueryMapper.java for type in PreparedStatement String do cat <<EOF @Override $(echo $method | sed -e "s/ResultSet rs/$type query/" -e 's/) {/, final Object... bindObjects) {/') try { return delegate.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/query/' -e 's/) {/, bindObjects);/') } catch (Throwable e) { if (verbose) e.printStackTrace(); } return null; } EOF done >> "$null_query" # ListQueryMapper.java cat >> "$list_query" <<EOF @Override $(echo $method | sed -e 's/ResultSet rs/PreparedStatement ps/' -e 's/) {/, final Object... bindObjects) throws SQLException {/') return delegate.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/ps/' -e 's/) {/, bindObjects);/') } @Override $(echo $method | sed -e 's/ResultSet rs/String sql/' -e 's/) {/, final Object... bindObjects) throws SQLException {/') return delegate.$method_name$(echo $method | sed -e 's/^.*(//' -e 's/final //g' -e 's/, [^ ]* /, /g' -e 's/ResultSet rs/prepareSql(sql, bindObjects)/' -e 's/) {/, bindObjects);/') } EOF done finishFile "src/main/java/com/moparisthebest/jdbc/QueryMapper.java" finishFile "src/main/java/com/moparisthebest/jdbc/CachingQueryMapper.java" finishFile "src/main/java/com/moparisthebest/jdbc/NullQueryMapper.java" finishFile "src/main/java/com/moparisthebest/jdbc/ListQueryMapper.java"