/*
* Created by Andrey Cherkashin (acherkashin)
* http://acherkashin.me
*
* License
* Copyright (c) 2015 Andrey Cherkashin
* The project released under the MIT license: http://opensource.org/licenses/MIT
*/
package ragefist.extension.mysql;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.luaj.vm2.LuaTable;
import org.luaj.vm2.LuaValue;
/**
*
* @author acherkashin
*/
public class ResultSetConverter
{
public static LuaTable convertToLuaTable(ResultSet rs) throws SQLException {
LuaTable table = LuaTable.tableOf();
ResultSetMetaData rsmd = rs.getMetaData();
int row = 1;
while(rs.next()) {
int numColumns = rsmd.getColumnCount();
LuaTable item = LuaTable.tableOf();
for (int i=1; i<numColumns+1; i++) {
String columnName = rsmd.getColumnName(i);
if(rsmd.getColumnType(i) == java.sql.Types.ARRAY){
Logger.getLogger(ResultSetConverter.class.getName()).log(Level.SEVERE, "Array Type is not supported");
}
else if(rsmd.getColumnType(i)==java.sql.Types.BIGINT){
item.set(columnName, LuaValue.valueOf(rs.getInt(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BOOLEAN){
item.set(columnName, LuaValue.valueOf(rs.getBoolean(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.BLOB){
Logger.getLogger(ResultSetConverter.class.getName()).log(Level.SEVERE, "Blob Type is not supported");
}
else if(rsmd.getColumnType(i)==java.sql.Types.DOUBLE){
item.set(columnName, LuaValue.valueOf(rs.getDouble(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.FLOAT){
item.set(columnName, LuaValue.valueOf(rs.getFloat(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.INTEGER){
item.set(columnName, LuaValue.valueOf(rs.getInt(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.NVARCHAR){
item.set(columnName, LuaValue.valueOf(rs.getNString(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.VARCHAR){
item.set(columnName, LuaValue.valueOf(rs.getString(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TINYINT){
item.set(columnName, LuaValue.valueOf(rs.getInt(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.SMALLINT){
item.set(columnName, LuaValue.valueOf(rs.getInt(columnName)));
}
else if(rsmd.getColumnType(i)==java.sql.Types.DATE){
item.set(columnName, LuaValue.valueOf(rs.getDate(columnName).toString()));
}
else if(rsmd.getColumnType(i)==java.sql.Types.TIMESTAMP){
item.set(columnName, LuaValue.valueOf(rs.getTimestamp(columnName).toString()));
}
else {
Logger.getLogger(ResultSetConverter.class.getName()).log(Level.SEVERE, "Unsupported type");
}
}
table.set(row, item);
}
return table;
}
}