DatabankCommands.java 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. package me.km.snuviscript.commands;
  2. import java.sql.PreparedStatement;
  3. import java.sql.ResultSet;
  4. import java.sql.SQLException;
  5. import me.hammerle.snuviscript.code.ScriptManager;
  6. import me.hammerle.snuviscript.exceptions.StackTrace;
  7. import me.km.databank.DataBank;
  8. import me.km.scheduler.SnuviScheduler;
  9. public class DatabankCommands {
  10. public static void registerFunctions(ScriptManager sm, SnuviScheduler scheduler, DataBank dataBank) {
  11. sm.registerFunction("databank.prepare", (sc, in) -> {
  12. PreparedStatement p = dataBank.prepareUnsafeStatement(in[0].getString(sc));
  13. if(in.length <= 1 || in[1].getBoolean(sc)) {
  14. sc.addCloseable(p);
  15. }
  16. return p;
  17. });
  18. sm.registerConsumer("databank.setint", (sc, in) -> {
  19. ((PreparedStatement) in[0].get(sc)).setInt(in[1].getInt(sc), in[2].getInt(sc));
  20. });
  21. sm.registerConsumer("databank.setlong", (sc, in) -> {
  22. ((PreparedStatement) in[0].get(sc)).setLong(in[1].getInt(sc), in[2].getLong(sc));
  23. });
  24. sm.registerConsumer("databank.setdouble", (sc, in) -> {
  25. ((PreparedStatement) in[0].get(sc)).setDouble(in[1].getInt(sc), in[2].getDouble(sc));
  26. });
  27. sm.registerConsumer("databank.setstring", (sc, in) -> {
  28. ((PreparedStatement) in[0].get(sc)).setString(in[1].getInt(sc), in[2].getString(sc));
  29. });
  30. sm.registerConsumer("databank.setbool", (sc, in) -> {
  31. ((PreparedStatement) in[0].get(sc)).setBoolean(in[1].getInt(sc), in[2].getBoolean(sc));
  32. });
  33. sm.registerFunction("databank.getint", (sc, in) -> (double) ((ResultSet) in[0].get(sc)).getInt(in[1].getInt(sc)));
  34. sm.registerFunction("databank.getlong", (sc, in) -> (double) ((ResultSet) in[0].get(sc)).getLong(in[1].getInt(sc)));
  35. sm.registerFunction("databank.getdouble", (sc, in) -> ((ResultSet) in[0].get(sc)).getDouble(in[1].getInt(sc)));
  36. sm.registerFunction("databank.getstring", (sc, in) -> ((ResultSet) in[0].get(sc)).getString(in[1].getInt(sc)));
  37. sm.registerFunction("databank.getbool", (sc, in) -> ((ResultSet) in[0].get(sc)).getBoolean(in[1].getInt(sc)));
  38. sm.registerFunction("databank.execute", (sc, in) -> ((PreparedStatement) in[0].get(sc)).executeQuery());
  39. sm.registerConsumer("databank.workerexecute", (sc, in) -> {
  40. final PreparedStatement p = (PreparedStatement) in[0].get(sc);
  41. StackTrace lines = sc.getStackTrace();
  42. String function = "databank.workerexecute";
  43. scheduler.scheduleAsyncTask(() -> {
  44. try {
  45. p.execute();
  46. } catch(SQLException ex) {
  47. scheduler.scheduleTask(() -> {
  48. sc.getScriptManager().getLogger().print("Worker error", ex, function, sc.getName(), sc, lines);
  49. });
  50. }
  51. sc.removeCloseable(p);
  52. try {
  53. p.close();
  54. } catch(SQLException ex) {
  55. scheduler.scheduleTask(() -> {
  56. sc.getScriptManager().getLogger().print("Worker error", ex, function, sc.getName(), sc, lines);
  57. });
  58. }
  59. });
  60. });
  61. sm.registerFunction("databank.next", (sc, in) -> ((ResultSet) in[0].get(sc)).next());
  62. sm.registerConsumer("databank.close", (sc, in) -> {
  63. AutoCloseable auto = (AutoCloseable) in[0].get(sc);
  64. auto.close();
  65. sc.removeCloseable(auto);
  66. });
  67. sm.registerFunction("worker.haswork", (sc, in) -> scheduler.hasAsyncWork());
  68. }
  69. }