﻿B4J=true
Group=System
ModulesStructureVersion=1
Type=StaticCode
Version=5.9
@EndOfDesignText@
Sub Process_Globals
	Public sql As SQL
	Private cp As HikariCP 'ignore
	Public isInlitialized As Boolean
	Private pool As ConnectionPool
	Private SQLite As SQL
	Public UsePool As Boolean
	Private nrbase As Int
	Public Error As String
	Public Er As Boolean
'	Private SQLCiper As SQLCipher
End Sub


Sub InitializeSQLite(Dir As String, fileName As String, createIfNeeded As Boolean) 'ignore
	Log("init sqlite")
	SQLite.InitializeSQLite(Dir, fileName, createIfNeeded)
	UsePool = False
	nrbase=1
End Sub


Sub InicjalizeH2(filedatabase As String,password As String) 'ignore
	Log("init H2")
	Dim driver As String = "org.h2.Driver"
	Dim url As String = $"jdbc:h2:${File.DirApp}\${filedatabase};CIPHER=AES"$
	sql.Initialize2(driver,url,"user", password)
	nrbase=3

End Sub



Sub InitializeMySQL(jdbcUrl As String ,login As String, password As String, poolSize As Int) 'ignore
	Log("init mysql")
	UsePool = True
	Try
		pool.Initialize("com.mysql.jdbc.Driver", jdbcUrl, login, password)
	Catch
		Log("Last Pool Init Except: "&LastException.Message)
	End Try

	' change pool size...
	Dim jo As JavaObject = pool
	jo.RunMethod("setMaxPoolSize", Array(poolSize))
	nrbase = 2
End Sub


'Sub InitializeMySQL_Hicari(jdbcUrl As String ,login As String, password As String) 'ignore
'	Log("init mysql hicari")
'	cp.Initialize("com.mysql.jdbc.Driver", jdbcUrl,login,password)
'	Dim jocp As JavaObject = cp
'	jocp.RunMethod("setMaximumPoolSize", Array(4))
'	jocp.RunMethod("addDataSourceProperty", Array("cachePrepStmts", True))
'	jocp.RunMethod("addDataSourceProperty", Array("prepStmtCacheSize", 250))
'	jocp.RunMethod("addDataSourceProperty", Array("prepStmtCacheSqlLimit", 2048))
'	jocp.RunMethod("addDataSourceProperty", Array("useServerPrepStmts", True))
'	jocp.RunMethod("addDataSourceProperty", Array("useLocalSessionState", True))
'	jocp.RunMethod("addDataSourceProperty", Array("useLocalTransactionState", True))
'	jocp.RunMethod("addDataSourceProperty", Array("rewriteBatchedStatements", True))
'	jocp.RunMethod("addDataSourceProperty", Array("cacheResultSetMetadata", True))
'	jocp.RunMethod("addDataSourceProperty", Array("cacheServerConfiguration", True))
'	jocp.RunMethod("addDataSourceProperty", Array("elideSetAutoCommits", True))
'	jocp.RunMethod("addDataSourceProperty", Array("maintainTimeStats", True))
'	sql = cp.GetConnection
'	isInlitialized = True
'	Log("Database connectd OK")
'	nrbase=3
'End Sub


Sub GetSQL() As SQL 'ignore
	Er=False
	Error = "No Error"

Select nrbase
	Case 1:
		Return SQLite
	Case 2:
		Return pool.GetConnection
	Case 3:
		Return sql

End Select
End Sub

Sub CloseSQL(mySQL As SQL) 'ignore
	If UsePool Then
		mySQL.Close
	End If
End Sub

Sub GetSQL2() As SQL 'ignore
	sql = cp.GetConnection
End Sub

Sub CloseSQL2(mySQL As SQL) 'ignore
	cp.ClosePool
End Sub


Sub SQLSelect(Query As String, Args As List) As List 'ignore
'	sql=cp.GetConnection
	Dim sql1 As SQL = GetSQL

	Dim l As List
	l.Initialize
	Dim cur As ResultSet
	Try
		cur = sql1.ExecQuery2(Query, Args)
	Catch
		Log(LastException)
		Error = LastException
		Er = True
		Return l
	End Try
	
	Do While cur.NextRow
		Dim res As Map
		res.Initialize
		For i = 0 To cur.ColumnCount - 1
			res.Put(cur.GetColumnName(i).ToLowerCase, cur.GetString2(i))
		Next
		l.Add(res)
	Loop
	cur.Close
'	cp.ClosePool
	Return l
End Sub


Sub SQLCreate( Query As String) As Int 'ignore
'	sql=cp.GetConnection
'	sql = GetSQL
	Dim sql1 As SQL = GetSQL
	Dim res As Int
	Try
		sql1.ExecNonQuery(Query)
		res = 0
	Catch
		Log(LastException)
		res = -99999999
		Error = LastException
		Er = True
	End Try
'	cp.ClosePool
	Return res
End Sub


Sub SQLInsert(Query As String, Args As List ) As Int 'ignore
'	sql=cp.GetConnection
'	sql = GetSQL
	Dim sql1 As SQL = GetSQL
	Dim Res As Int
	Try
		sql1.ExecNonQuery2(Query,Args)
'		Res = SQLSelectSingleResult(GetSQL,"SELECT LAST_INSERT_ID()",Null)
	Catch
		Log(LastException)
		Res = -99999999
		Error = LastException
		Er = True
	End Try
'	cp.ClosePool
	Return Res
End Sub


Sub SQLUpdate(Query As String, Arg As List) As Int 'ignore
'	sql=cp.GetConnection
'	sql = GetSQL
	Dim sql1 As SQL = GetSQL
	Dim Res As Int
	Try
		sql1.ExecNonQuery2(Query, Arg)
		Res = 0
	Catch
		Log(LastException)
		Res = -99999999
		Error = LastException
		Er = True
	End Try
'	cp.ClosePool
	Return Res
End Sub



Sub SQLDelete(Query As String, Arg As List) As Int 'ignore
'	sql=cp.GetConnection
'	sql = GetSQL
	Dim sql1 As SQL = GetSQL
	Dim Res As Int
	Try
		sql1.ExecNonQuery2(Query, Arg)
		Res = 0
	Catch
		Log(LastException)
		Res = -99999999
		Error = LastException
		Er = True
	End Try
'	cp.ClosePool
	Return Res
End Sub


Sub SQLSelectSingleResult(Query As String, Arg As List) As String 'ignore
'	sql=cp.GetConnection
'	sql = GetSQL
	Dim sql1 As SQL = GetSQL
	Dim res As String
	Try
		res = sql1.ExecQuerySingleResult2(Query, Arg)
	Catch
		Log(LastException)
		res = -99999999
		Error = LastException
		Er = True
	End Try
'	cp.ClosePool
	If res = Null Then
		Return "0"
	End If
	Return res
End Sub


Sub BuildSelectQuery(TableName As String, Fields As Map, WhereFields As Map, OrderFields As Map) As String 'ignore
	Dim sb As StringBuilder
	sb.Initialize
	sb.Append("SELECT ")
	For i = 0 To Fields.Size - 1
		Dim col As String = Fields.GetKeyAt(i)
		If i > 0 Then
			sb.Append(", ")
		End If
		sb.Append(col)
	Next
	sb.Append(" FROM " & TableName)
	If WhereFields.IsInitialized Then
		sb.Append(" WHERE ")
		For i = 0 To WhereFields.Size - 1
			Dim col As String = WhereFields.GetKeyAt(i)
			Dim value As String = WhereFields.GetValueAt(i)
			If i > 0 Then
				sb.Append(" AND ")
			End If
			sb.Append(col & "=" & value)
		Next
	End If
	If OrderFields.IsInitialized Then
		sb.Append(" ORDER BY ")
		For i = 0 To WhereFields.Size - 1
			Dim col As String = OrderFields.GetKeyAt(i)
			If i > 0 Then
				sb.Append(", ")
			End If
			sb.Append(col)
		Next
	End If
	
	Return sb.ToString
End Sub

Sub BuildInsertQuery(TableName As String, Fields As Map) As String 'ignore
	Dim sb As StringBuilder
	sb.Initialize
	sb.Append("INSERT INTO " & TableName & "(")
	For i = 0 To Fields.Size - 1
		Dim col As String = Fields.GetKeyAt(i)
		If i > 0 Then
			sb.Append(", ")
		End If
		sb.Append(col)
	Next
	sb.Append(") VALUES (")
	For i = 0 To Fields.Size - 1
		Dim col As String = Fields.GetValueAt(i)
		If i > 0 Then
			sb.Append(", ")
		End If
		sb.Append(col)
	Next
	sb.Append(")")
	Return sb.ToString
End Sub

Sub BuildDeleteQuery(TableName As String, WhereFields As Map) As String 'ignore
	Dim sb As StringBuilder
	sb.Initialize
	sb.Append("DELETE FROM " & TableName)
	If WhereFields.IsInitialized Then
		sb.Append(" WHERE ")
		For i = 0 To WhereFields.Size - 1
			Dim col As String = WhereFields.GetKeyAt(i)
			Dim value As String = WhereFields.GetValueAt(i)
			If i > 0 Then
				sb.Append(" AND ")
			End If
			sb.Append(col & "=" & value)
		Next
	End If
	Return sb.ToString
End Sub

Sub BuildUpdateQuery(TableName As String, Fields As Map, WhereFields As Map) As String 'ignore
	Dim sb As StringBuilder
	sb.Initialize
	sb.Append("UPDATE " & TableName & " SET ")
	For i = 0 To Fields.Size - 1
		Dim col As String = Fields.GetKeyAt(i)
		Dim value As String = Fields.GetValueAt(i)
		If i > 0 Then
			sb.Append(", ")
		End If
		sb.Append(col & "=" & value)
	Next
	If WhereFields.IsInitialized Then
		sb.Append(" WHERE ")
		For i = 0 To WhereFields.Size - 1
			Dim col As String = WhereFields.GetKeyAt(i)
			Dim value As String = WhereFields.GetValueAt(i)
			If i > 0 Then
				sb.Append(" AND ")
			End If
			sb.Append(col & "=" & value)
		Next
	End If
	Return sb.ToString
End Sub

