There was a task of converting the MySql base into the sqlite base. In the
Converter Tools wiki sqlite, there is a shell script for quick conversion, but after trying to use it, I got a lot of errors. So I had to tweak it a bit.
#! / bin / sh
if ["x $ 1" == "x"]; then
echo "Usage: _SELTEXT_"
exit
fi
if [-e "$ 1.db"]; then
echo "$ 1.db already exists. I will overwrite it in 15 seconds if you do not press CTRL-C."
COUNT = 15
while [$ COUNT -gt 0]; do
echo "$ COUNT"
sleep 1
COUNT = $ ((COUNT - 1))
done
rm $ 1.db
fi
mysqldump -u root -p --compact --compatible = ansi --default-character-set = binary $ 1> tmp
cat tmp |
grep -v 'KEY "' |
grep -v 'UNIQUE KEY "' |
grep -v 'PRIMARY KEY' |
sed '/ ^ SET / d' |
sed 's / unsigned / / g' |
sed 's / auto_increment / primary key autoincrement / g' |
sed 's / smallint ([0-9] *) / integer / g' |
sed 's / tinyint ([0-9] *) / integer / g' |
sed 's / int ([0-9] *) / integer / g' |
sed 's / character set [^] * / / g' |
sed 's / enum ([^)] *) / varchar (255) / g' |
sed 's / on update [^,] * // g' |
perl -e 'local $ /; $ _ = <>; s /, \ n \) / \ n \) / gs; print "begin; \ n"; print; print "commit; \ n"' |
perl -pe '
if (/^(INSERT.+?)\(/) {
$ a = $ 1;
s / \\ '\' '/' \ '\' '/ g;
s / \\ n / \ n / g;
s / \), \ (/ \); \ n $ a \ (/ g;
}
'> $ 1.sql
cat $ 1.sql | sqlite3 $ 1.db> $ 1.err
ERRORS = `cat $ 1.err | wc -l`
if [$ ERRORS == 0]; then
echo “Conversion completed without error. Output file: $ 1.db »
rm $ 1.sql
rm $ 1.err
rm tmp
else
echo "There were errors during conversion. Please review $ 1.err and $ 1.sql for details. "
fi
bug reports, suggestions, suggestions are welcome