にむぞノート

新米プログラマーです。 仕事、 趣味で得た知識を適当に残していきます。

JPQLからSQLに変換するスクリプト

いろいろと途中で申し訳ないんですけど、 PowerShellでJPQLからSQLOracle)への変換スクリプトを書いたので、貼っておきます。 もちろん、ここから改善する予定です。 ちょっと、急ぎなので、色ついてないですがすいません。。。

$ErrorActionPreference = "stop"

function IsPascalCase([string] $ss) { if ($ss -cmatch "^[A-Z][a-z][A-Za-z]+$") { return $true } return $false }

function IsSnakeCase([string] $ss) { if ($ss -cmatch "^[a-z]+.[A-Za-z]+$") { return $true } return $false }

function ReplacePascalWithSnake([string] $pascal) { $camel = $pascal -replace $pascal.Substring(0,1), $pascal.Substring(0,1).ToLower() $snake foreach ($i in $camel.ToCharArray()) { $ss = $i.ToString() if ($ss -cmatch "^[A-Z]$") { $snake = $snake + "_" + $ss.ToLower() } else { $snake = $snake + $ss } } return $snake }

function ReplaceCamelWithSnake([string] $camel) { $snake foreach ($i in $camel.ToCharArray()) { $ss = $i.ToString() if ($ss -cmatch "^[A-Z]$") { $snake = $snake + "_" + $ss.ToLower() } else { $snake = $snake + $ss } } return $snake }

$jpql = "SELECT jt JpqlTest jt FROM jt.jpqlId = :jpqlId AND jt.removedFlag = :notRemoved" $tokens = $jpql.Split(" ")

$sql = "" for ($i = 0; $i -lt $tokens.Length; $i++) { # for converting table name. if (IsPascalCase($tokens[$i])) { $sql = $sql + (ReplacePascalWithSnake($tokens[$i])) + " " # for converting field name. } elseif (IsSnakeCase($tokens[$i])) { $sql = $sql + (ReplaceCamelWithSnake($tokens[$i])) + " " } else { $sql = $sql + $tokens[$i] + " " } Write-Host $sql }

$result = $sql.Replace(" "," ") Write-Host $result Set-Clipboard $result