2014-12-02 22 views
0

有沒有辦法使用Slick SourceCodeGenerator從SQL CREATE語句文件中生成源代碼?我知道有一種方法可以連接到數據庫並讀取模式,但是我希望切出這一步並將其提供給文件。請指教。Slick SourceCodeGenerator來自SQL文件

回答

0

通過jdbc準備好元數據。如果你找到一個可以通過SQL文件實現的jdbc驅動程序,那麼你可能很幸運。否則,爲什麼不使用H2內存數據庫?它具有各種SQL方言的兼容模式。但它們是有限的。另一個選擇是使用這樣的東西:https://github.com/bgranvea/mysql2h2-converter首先產生一個H2兼容的模式文件。

我們使用以下腳本從mysql數據庫加載sql模式,將其轉換爲H2兼容格式,然後在內存中使用它進行測試。你應該能夠適應它。

#!/bin/sh 
echo '' 
export IP=192.168.1.123 
export user=foobar 
export password=secret 
export database=foobar 
ping -c 1 $IP &&\ 
echo "" &&\ 
echo "Server is reachable" 
# dump mysql schema for debuggability (ignore in git) 
# convert the mysql to h2db using the converter. 

## disable foreign key check in begining and enable it in the end. Prevents foreign key errors 
echo "SET FOREIGN_KEY_CHECKS=0;" > foobar-mysql.sql 

## Dump the Db structure and remove the auto_increment so as to set the id column back to 1 
mysqldump --compact -u $user -h $IP -d $database -p$password\ 
|sed 's/CONSTRAINT `_*/CONSTRAINT `/g' \ 
|sed 's/KEY `_*/KEY `/g' \ 
|sed 's/ AUTO_INCREMENT=[0-9]*//' \ 
>> foobar-mysql.sql 

echo "SET FOREIGN_KEY_CHECKS=1;" >> foobar-mysql.sql &&\ 

java -jar mysql2h2-converter.jar foobar-mysql.sql \ 
|perl -0777 -pe 's/([^`]),/\1,\n /g' \ 
|perl -0777 -pe 's/\)\);/)\n);/g' \ 
|perl -0777 -pe 's/(CREATE TABLE [^\(]*\()/\1\n /g' \ 
|sed 's/UNSIGNED/unsigned/g' \ 
|sed 's/float/real/' \ 
|sed "s/\(int([0-9]*).*\) DEFAULT '\(.*\)'/\1 DEFAULT \2/" \ 
|sed "s/tinyint(1)/boolean/" \ 
> foobar-h2.sql 

perl -ne 'print "$ARGV\n" if /.\z/' -- foobar-h2.sql