JPQLからSQLに変換するスクリプト
いろいろと途中で申し訳ないんですけど、 PowerShellでJPQLからSQL(Oracle)への変換スクリプトを書いたので、貼っておきます。 もちろん、ここから改善する予定です。 ちょっと、急ぎなので、色ついてないですがすいません。。。
$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