DatabankCommands.java 3.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  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,
  11. DataBank dataBank) {
  12. sm.registerFunction("databank.prepare", (sc, in) -> {
  13. PreparedStatement p = dataBank.prepareUnsafeStatement(in[0].getString(sc));
  14. if(in.length <= 1 || in[1].getBoolean(sc)) {
  15. sc.addCloseable(p);
  16. }
  17. return p;
  18. });
  19. sm.registerConsumer("databank.setint", (sc, in) -> {
  20. ((PreparedStatement) in[0].get(sc)).setInt(in[1].getInt(sc), in[2].getInt(sc));
  21. });
  22. sm.registerConsumer("databank.setlong", (sc, in) -> {
  23. ((PreparedStatement) in[0].get(sc)).setLong(in[1].getInt(sc), in[2].getLong(sc));
  24. });
  25. sm.registerConsumer("databank.setdouble", (sc, in) -> {
  26. ((PreparedStatement) in[0].get(sc)).setDouble(in[1].getInt(sc), in[2].getDouble(sc));
  27. });
  28. sm.registerConsumer("databank.setstring", (sc, in) -> {
  29. ((PreparedStatement) in[0].get(sc)).setString(in[1].getInt(sc), in[2].getString(sc));
  30. });
  31. sm.registerConsumer("databank.setbool", (sc, in) -> {
  32. ((PreparedStatement) in[0].get(sc)).setBoolean(in[1].getInt(sc), in[2].getBoolean(sc));
  33. });
  34. sm.registerFunction("databank.getint",
  35. (sc, in) -> (double) ((ResultSet) in[0].get(sc)).getInt(in[1].getInt(sc)));
  36. sm.registerFunction("databank.getlong",
  37. (sc, in) -> (double) ((ResultSet) in[0].get(sc)).getLong(in[1].getInt(sc)));
  38. sm.registerFunction("databank.getdouble",
  39. (sc, in) -> ((ResultSet) in[0].get(sc)).getDouble(in[1].getInt(sc)));
  40. sm.registerFunction("databank.getstring",
  41. (sc, in) -> ((ResultSet) in[0].get(sc)).getString(in[1].getInt(sc)));
  42. sm.registerFunction("databank.getbool",
  43. (sc, in) -> ((ResultSet) in[0].get(sc)).getBoolean(in[1].getInt(sc)));
  44. sm.registerFunction("databank.execute",
  45. (sc, in) -> ((PreparedStatement) in[0].get(sc)).executeQuery());
  46. sm.registerConsumer("databank.workerexecute", (sc, in) -> {
  47. final PreparedStatement p = (PreparedStatement) in[0].get(sc);
  48. StackTrace lines = sc.getStackTrace();
  49. String function = "databank.workerexecute";
  50. scheduler.scheduleAsyncTask(() -> {
  51. try {
  52. p.execute();
  53. } catch(SQLException ex) {
  54. scheduler.scheduleTask("worker execute 1", () -> {
  55. sc.getScriptManager().getLogger().print("Worker error", ex, function,
  56. sc.getName(), sc, lines);
  57. });
  58. }
  59. sc.removeCloseable(p);
  60. try {
  61. p.close();
  62. } catch(SQLException ex) {
  63. scheduler.scheduleTask("worker execute 2", () -> {
  64. sc.getScriptManager().getLogger().print("Worker error", ex, function,
  65. sc.getName(), sc, lines);
  66. });
  67. }
  68. });
  69. });
  70. sm.registerFunction("databank.next", (sc, in) -> ((ResultSet) in[0].get(sc)).next());
  71. sm.registerConsumer("databank.close", (sc, in) -> {
  72. AutoCloseable auto = (AutoCloseable) in[0].get(sc);
  73. auto.close();
  74. sc.removeCloseable(auto);
  75. });
  76. sm.registerFunction("worker.haswork", (sc, in) -> scheduler.hasAsyncWork());
  77. }
  78. }