#include-once

#cs
	Function Name:    _MySQLConnect
	Description:      Initiate a connection to a MySQL database.
	Parameter(s):     $username - The username to connect to the database with.
	$password - The password to connect to the database with. $Database - Database to connect to.
	$server - The server your database is on.
	$driver (optional) the ODBC driver to use (default is "{MySQL ODBC 3.51 Driver}"
	Requirement(s):   Autoit 3 with COM support
	Return Value(s):  On success returns the connection object for subsequent functions. On failure returns 0 and sets @error
	@Error = 1
	Error opening connection
	@Error = 2
	MySQL ODBC Driver not installed.
	Author(s):        cdkid
#ce

Func _MySQLConnect($sUsername, $sPassword, $sDatabase, $sServer, $sDriver = "{MySQL ODBC 3.51 Driver}", $iPort=3306)
	Local $v = StringMid($sDriver, 2, StringLen($sDriver) - 2)
	Local $key = "HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers", $val = RegRead($key, $v)
	If @error or $val = "" Then
		SetError(2)
		Return 0
	EndIf
	$ObjConn = ObjCreate("ADODB.Connection")
	$Objconn.open ("DRIVER=" & $sDriver & ";SERVER=" & $sServer & ";DATABASE=" & $sDatabase & ";UID=" & $sUsername & ";PWD=" & $sPassword & ";PORT="&$iPort)
	If @error Then
		SetError(1)
		Return 0
	Else
		Return $ObjConn
	EndIf
EndFunc   ;==>_MySQLConnect

#cs
	Function name: _Query
	Description:     Send a query to the database
	Parameter(s):  $oConnectionObj - As returned by _MySQLConnect. $query - The query to execute
	Return Value(s):On success returns the query result. On failure returns 0 and sets @error to 1
	Requirement(s):Autoit3 with COM support
	Author(s):        cdid
#ce


Func _Query($oConnectionObj, $sQuery)
	If IsObj($oConnectionObj) Then
		Return $oConnectionobj.execute($sQuery)
	EndIf
	If @error Then
		SetError(1)
		Return 0
	EndIf

EndFunc   ;==>_Query

#cs
	Function name: _MySQLEnd
	Description:      Closes the database connection (see notes!)
	Parameter(s):   $oConnectionObj - The connection object as returned by _MySQLConnect()
	Requirement(s):Autoit 3 with COM support
	Return Value(s):On success returns 1. On failure returns 0 and sets @error to 1
	Author(s):         cdkid
#ce

Func _MySQLEnd($oConnectionObj)
	If IsObj($oConnectionObj) Then
		$oConnectionObj.close
		Return 1
	Else
		SetError(1)
		Return 0
	EndIf
EndFunc   ;==>_MySQLEnd

#cs
	Function name: _AddRecord
	Description:     Adds a record to the specified table
	Note(s):           to add to multiple columns use an array with one blank element at the end as the $sColumn, and $value parameter
	Parameter(s):   $oConnectionObj - As returned by _MySQL Connect. $sTable - The table to put the record in
	                $row - The row to put the record in. $value - The value to put into the row
					$vValue - OPTIONAL default will be default for the column (will not work with array, see notes)
	Requirement(s): Autoit 3 with COM support
	Return value(s): On success returns 1. If the connectionobj is not an object returns 0 and sets @error to 2. If there is any other error returns 0 and sets @error to 1.
	Author(s): cdkid
#ce

Func _AddRecord($oConnectionObj, $sTable, $vRow, $vValue = "")
	If IsObj($oConnectionObj) Then
		$query = "INSERT INTO " & $sTable & " ("

		If IsArray($vRow) Then
			For $i = 0 To UBound($vRow, 1) - 1
				If $i > 0 And $i <> UBound($vRow, 1) - 1 Then
					$query = $query & "," & $vRow[$i] & ""
				ElseIf $i = UBound($vRow, 1) - 1 And $vRow[$i] <> "" Then
					$query = $query & "," & $vRow[$i] & ") VALUES("
				ElseIf $i = 0 Then
					$query = $query & "" & $vRow[$i] & ""
				ElseIf $vRow[$i] = "" Then
					$query = $query & ") VALUES("
				EndIf
			Next
		EndIf
		If Not IsArray($vRow) And Not IsArray($vValue) And Not IsInt($vValue) Then
			$oConnectionobj.execute ("INSERT INTO " & $sTable & " (" & $vRow & ") VALUES('" & $vValue & "')")
			return 1
		ElseIf IsInt($vValue) And Not IsArray($vRow) And Not IsArray($vValue) Then
			$oconnectionobj.execute ("INSERT INTO " & $sTable & " (" & $vRow & ") VALUES(" & $vValue & ")")
			return 1
		EndIf

		If IsArray($vValue) Then
			For $i = 0 To UBound($vValue, 1) - 1
				If $i > 0 And $i <> UBound($vValue, 1) - 1 And Not IsInt($vValue[$i]) Then
					$query = $query & ",'" & $vValue[$i] & "'"
				ElseIf $i = UBound($vValue, 1) - 1 And $vValue[$i] <> "" And Not IsInt($vValue[$i]) Then
					$query = $query & ",'" & $vValue[$i] & "');"
				ElseIf $i = 0 And Not IsInt($vValue[$i]) Then
					$query = $query & "'" & $vValue[$i] & "'"
				ElseIf $vValue[$i] = "" Then
					$query = $query & ");"
				ElseIf IsInt($vValue[$i]) And $vValue[$i] <> "" Then
					$query = $query & "," & $vValue[$i]
				EndIf
			Next
		EndIf
		If StringRight($query, 2) <> ");" Then
			$query = $query & ");"

		EndIf
		$oconnectionobj.execute ($query)
	EndIf
	If Not IsObj($oConnectionObj) Then
		SetError(2)
		Return 0
	EndIf
	If @error And IsObj($oConnectionObj) Then
		Return 0
		SetError(1)
	Else
		Return 1
	EndIf

EndFunc   ;==>_AddRecord


#cs
	Function name: _DeleteRecord
	Description:     Deletes a record from the specified table
	Parameter(s):  $oConnectionObj - As returned by _MySQLConnect. $sTable - The table to delete from.
	$sColumn - The column to check value (see the example in the next post) $vRecordVal -
	The value to check in $sColumn (see example).
	$iLimit (optional) - the max number of record to delete if multiple match the criteria (default 1)
	Return Value(s): On success returns 1. If there $oConnectionObj is not an object returns 0 and sets @error to 1. If there are any other errors returns 0 and sets @error to 2
	Requirement(s): Autoit 3 with COM support
#ce

Func _DeleteRecord ($oConnectionObj, $sTable, $sColumn, $vRecordVal, $iLimit = 1)
	If IsObj($oConnectionObj) And Not IsInt($vRecordVal) Then
		$oconnectionobj.execute ("DELETE FROM " & $sTable & " WHERE " & $sColumn & " = '" & $vRecordVal & "' LIMIT " & $iLimit & ";")
	ElseIf IsInt($vRecordVal) Then
		$oconnectionobj.execute ("DELETE FROM " & $sTable & " WHERE " & $sColumn & " = " & $vRecordVal & " LIMIT " & $iLimit & ";")
		If Not @error Then
			Return 1
		ElseIf Not IsObj($oConnectionObj) Then
			SetError(1)
			Return 0
		ElseIf @error And IsObj($oConnectionObj) Then
			SetError(2)
			Return 0
		EndIf
	EndIf
EndFunc   ;==>_DeleteRecord

#cs
	Function name: _CreateTable()
	Description: Creates a table
	Parameters: $oConnectionObj - as returned by _MySQLConnect, $sTbl - The name of the table to create, $sPrimeKey - The name of the
	primary key column. $keytype - The datatype of the primary key (default is integer), $sNotNull - "yes" = must be filled out whenever
	a record is added "no" does not need to be filled out ("yes" default). $keyautoinc - "yes" = Auto incrememnts "no" = does not.
	$sType - The table type (default is InnoDB)
	Requirements: Autoit V3 with COM support
	Return value(s): on success returns 1 on failure sets @error to 1 and returns 0
	Author: cdkid
#ce

Func _CreateTable($oConnectionObj, $sTbl, $sPrimeKey, $keytype = "INTEGER", $sNotNull = "yes", $keyautoinc = "yes", $sType = "InnoDB")
	If IsObj($oConnectionObj) And Not @error Then
		$str = "CREATE TABLE " & $sTbl & " " & "(" & $sPrimeKey & " " & $keytype & " UNSIGNED"
		If $sNotNull = "yes" Then
			$str = $str & " NOT NULL"
		EndIf

		If $keyautoinc = "yes" Then
			$str = $str & " AUTO_INCREMENT,"
		EndIf

		$str = $str & " PRIMARY KEY (" & $sPrimeKey & " )" & " ) " & "TYPE = " & $sType & ";"
		$oConnectionObj.execute ($str)
		Return 1


	ElseIf @error Then
		Return 0
		SetError(1)
	EndIf

EndFunc   ;==>_CreateTable

#cs
	Function Name: _CreateColumn
	Description: Creates a column in the given table
	Requirements: AutoitV3 with COM support
	Parameters: $oConnectionObj - as returned by _MySQLConnect. $sTable - the name of the table to add the column to.
	$sAllowNull - if 'yes' then does not add 'NOT NULL' to the SQL statement (default 'yes') $sDataType - The data type of the column
	default('VARCHAR(45)').		$sAutoInc - if 'yes' adds 'AUTO_INCREMENT' to the MySQL Statement (for use with Integer types)
	default('no').		$sUnsigned - if 'yes' adds 'UNSIGNED' to the MySQL statement. default('no') $vDefault - the default value of the column
	default('')
	Author: cdkid
#ce

Func _CreateColumn($oConnectionObj, $sTable, $sColumn, $sAllowNull = "no", $sDataType = "VARCHAR(45)", $sAutoInc = "no", $sUnsigned = "no", $vDefault = '')
	If IsObj($oConnectionObj) And Not @error Then
		$str = "ALTER TABLE `" & $sTable & "` ADD COLUMN `" & $sColumn & "` " & $sDataType & " "
		If $sAllowNull = "yes" Then
			$str = $str & "NOT NULL "
		EndIf
		If $sAutoInc = 'yes' Then
			$str = $str & "AUTO_INCREMENT "
		EndIf
		If $sUnsigned = 'yes' Then
			$str = $str & "UNSIGNED "
		EndIf
		$str = $str & "DEFAULT '" & $vDefault & "';"
		$oConnectionObj.execute ($str)
		Return 1
	Else
		SetError(1)
		Return 0
	EndIf

EndFunc   ;==>_CreateColumn

#cs
	Function Name: _DropCol()
	Description: Delete a column from the given table
	Requirements: AutoitV3 with COM support
	Parameters: $oConnectionObj - As returned by _MySQLConnect(). $sTable - The name of the table to delete the column from
	$sColumn - THe name of the column to delete
	Author: cdkid
#ce

Func _DropCol($oConnectionObj, $sTable, $sColumn)
	If IsObj($oConnectionObj) & Not @error Then
		$oConnectionObj.execute ("ALTER TABLE " & $sTable & " DROP COLUMN " & $sColumn & ";")
		Return 1
	ElseIf @error Then
		SetError(1)
		Return 0
	EndIf
EndFunc   ;==>_DropCol

#cs
	Function Name: _DropTbl()
	Description: Deletes a table from the database
	Requirements: AutoitV3 with COM support
	Parameters: $oConnectionObj - As returned by _MySQLConnect. $sTable - The name of the table to delete
	Author: cdkid
#ce

Func _DropTbl($oConnectionObj, $sTable)
	If IsObj($oConnectionObj) And Not @error Then
		$oConnectionObj.execute ("DROP TABLE " & $sTable & ";")
		Return 1
	Else
		SetError(1)
		Return 0
	EndIf
EndFunc   ;==>_DropTbl


#cs
	Function name: _CountRecords()
	Description: Get the number of records in the specified column
	Parameters: $oConnectionObj - As returned by _MySQLConnect. $sTable - The name of the table that the column is in
	$value - If not = "" then it is put in the select statement in the WHERE clause (default "")
	Return value(s): On success returns the number of records. On failure sets @error to 1 and returns 0
	Author: cdkid
#ce
Func _CountRecords($oConnectionObj, $sTable, $sColumn, $vValue = '')
	If IsObj($oConnectionObj) And Not @error Then

		If $sColumn <> "" And $vValue <> "" And Not IsInt($vValue) Then
			$constr = "SELECT " & $sColumn & " FROM " & $sTable & " WHERE " & $sColumn & " = '" & $vValue & "'"
		ElseIf $sColumn <> "" And $vValue = '' And Not IsInt($vValue) Then
			$constr = "SELECT " & $sColumn & " FROM " & $sTable
		ElseIf IsInt($vValue) And $sColumn <> '' And $vValue <> '' Then
			$constr = "SELECT " & $sColumn & " FROM " & $sTable & " WHERE " & $sColumn & " = " & $vValue
		EndIf
		$sql2 = ObjCreate("ADODB.Recordset")
		$sql2.cursorlocation = 3
		$sql2.open ($constr, $oConnectionObj)
		With $sql2
			$ret = .recordcount
		EndWith
		$sql2.close
		Return $ret
	Else
		SetError(1)
		Return 0
	EndIf
EndFunc   ;==>_CountRecords

#cs
	Function name: _CountTables
	Description: Counts the number of tables in the database
	Parameter(s): $oConnectionObj - As returned by _MySQLConnect
	Return value(s): if error - returns 0 and sets @error to 1. on success returns the number of tables in the database
	Author: cdkid
#ce

Func _CountTables($oConnectionObj)
	If IsObj($oConnectionObj) Then
		$quer = $oConnectionObj.execute ("SHOW TABLES;")
		$i = 0
		With $quer
			While Not .EOF
				$i = $i + 1
				.MoveNext
			WEnd
		EndWith
		Return $i
	EndIf
	If @error Then
		SetError(1)
		Return 0
	EndIf

EndFunc   ;==>_CountTables

#cs
	Function name: _GetColNames
	Description: Get's the names of all columns in a specified table
	Parameters: $oConnectionObj - As returned by _MySQLConnect. $sTable - The name of the table to get the column names from
	Return values: On success returns an array where $array[0] is the number of elements in the array and all the rest are column names.
	On failure returns 0 and sets @error to 1
	Author: cdkid
#ce
Func _GetColNames($oConnectionObj, $sTable)
	If IsObj($oConnectionObj) And Not @error Then
		Dim $ret[1], $rs

		$rs = $oConnectionObj.execute ("SHOW COLUMNS FROM " & $sTable & ";")

		With $rs
			While Not .EOF

				ReDim $ret[UBound($ret, 1) + 1]
				$ret[UBound($ret, 1) - 1] = $rs.Fields (0).Value
				.MoveNext
			WEnd
		EndWith
		$ret[0] = UBound($ret, 1) - 1
		Return $ret
	EndIf
	If @error Then
		Return 0
		SetError(1)
	EndIf
EndFunc   ;==>_GetColNames


#cs
	Function name: _GetTblNames
	Description: Gets the names of all tables in the database
	Parameters: $oConnectionObj - As returned by _MySQLConnect
	Return value(s): On success returns an array where $array[0] is the number of tables and $array[n] is the nth table's name
	on failure - returns 0 and sets @error to 1
	Author: cdkid
#ce

Func _GetTblNames($oConnectionObj)
	If IsObj($oConnectionObj) Then
		Dim $ret[1]
		$quer = $oConnectionObj.execute ("SHOW TABLES;")
		With $quer
			While Not .eof
				ReDim $ret[UBound($ret, 1) + 1]
				$ret[UBound($ret, 1) - 1] = .fields (0).value
				.movenext
			WEnd
		EndWith
		$ret[0] = UBound($ret, 1) - 1
		Return $ret
	EndIf
EndFunc   ;==>_GetTblNames

#cs
	Function name: _GetColVals
	Description: Gets all of the values of a specified column in a specified table
	Parameters: $oConnectionObj - As returned by _MySQLConnect(), $sTable - the table that the column is in
	$sColumn - the column to get values from.
	Return value(s): On success returns an array where $array[0] is the number of values and $array[n] is the Nth value
	On failure sets @error to 1 and returns 0
	Author: cdkid
#ce

Func _GetColVals($oConnectionObj, $sTable, $sColumn)
	If IsObj($oConnectionObj) Then
		Dim $ret[1]
		$quer = $oConnectionObj.execute ("SELECT " & $sColumn & " FROM " & $sTable & ";")
		With $quer
			While Not .EOF
				ReDim $ret[UBound($ret, 1) + 1]
				$ret[UBound($ret, 1) - 1] = .Fields (0).value
				.MoveNext
			WEnd
		EndWith
		$ret[0] = UBound($ret, 1) - 1
		Return $ret
	EndIf
EndFunc   ;==>_GetColVals

#cs
	Function name: _GetColCount
	Description: Gets the number of columns in the specified table
	Parameters: $oConnectionObj - As returned by _MySQLConnect(). $sTable - the table to count the columns in
	Return Value(s): On success returns the number of columns in the table. On failure returns -1 and sets @error to 1
	Author: cdkid
#ce
Func _GetColCount($oConnectionObj, $sTable)
	If IsObj($oConnectionObj) Then
		$quer = $oConnectionObj.execute ("SHOW COLUMNS IN " & $sTable)
		With $quer
			$i = 0
			While Not .eof
				$i = $i + 1
				.movenext
			WEnd
		EndWith
		Return $i
	EndIf
	If @error Then
		Return -1
		SetError(1)
	EndIf

EndFunc   ;==>_GetColCount

#cs
	Function name: _GetColType
	Description: Gets the DATA TYPE of the specified column
	Parameters: $oConnectionObj - As returned by _MySQLConnect(). $sTable - the table that the column is in. $sColumn - the column
	to retrieve the data type from.
	Return value(s): On success returns the data type of the column. On failure returns 0 and sets @error to 1
	Author: cdkid
#ce
Func _GetColType($oConnectionObj, $sTable, $sColumn)
	If IsObj($oConnectionObj) Then
		$quer = $oConnectionObj.execute ("SHOW COLUMNS IN " & $sTable)
		With $quer
			$i = 0
			While Not .eof
				If .fields (0).value = $sColumn Then
					$ret = .fields (1).value
				EndIf
				.MoveNext
			WEnd
		EndWith
		Return $ret
	EndIf
	If @error Then
		Return 0
		SetError(1)
	EndIf
EndFunc   ;==>_GetColType

#cs
	Function: _GetDBNames
	Description: Get a count and list of all databases on current server.
	Parameters: $oConObj - As returned by _MySQLConnect
	Return Value(s): Success - An array where $array[0] is the number of databases and $array[n] is the nth database name.
	Failure - -1 and sets @error to 1
	Author: cdkid
#ce
Func _GetDBNames($conobj)
	If IsObj($conobj) Then
		Local $arr[1], $m
		$m = $conobj.Execute ("SHOW DATABASES;")
		With $m
			While Not .eof
				ReDim $arr[UBound($arr, 1) + 1]
				$arr[UBound($arr, 1) - 1] = .Fields (0).Value
				.MoveNext
			WEnd
		EndWith
		$arr[0] = UBound($arr, 1) - 1
		Return $arr
	Else
		SetError(1)
		Return -1
	EndIf
EndFunc   ;==>_GetDBNames

#cs
	Function: _ChangeCon
	Description: Change your connection string
	Parameters:
	$oConnectionObj
	As returned by _MySQLConnect
	$username
	OPTIONAL: the new username to use
	If omitted, the same username will be used.
	$password
	OPTIONAL: the new password to use
	If omitted, the same password will be used.
	$database
	OPTIONAL: the new database to connect to
	If omitted, the same database will be used.
	$driver
	OPTIONAL: the new driver to use
	If omitted, the MySQL ODBC 3.51 DRIVER will be used.
	$server
	OPTIONAL: the new server to connect to
	If omitted, the same server will be used.
	$iPort
	OPTIONAL: the new port to be used to connect
	if omitted, the default port (3306) will be used
	Return Value:
	On success, a new connection object for use with subsequent functions.
	On failure, -1 and sets @error to 1
	Author: cdkid
#ce

Func _ChangeCon($oConnectionObj, $username = "", $password = "", $database = "", $driver = "", $server = "", $iPort = 0)
	Local $constr, $db, $usn, $pwd, $svr
	If IsObj($oConnectionObj) Then
		$constr = $oConnectionObj.connectionstring
		$constr = StringReplace($constr, 'Provider=MSDASQL.1;Extended Properties="', '')
		$constr = StringSplit($constr, ";")
		For $i = 1 To $constr[0]
			If StringLeft($constr[$i], 3) = "UID" Then
				If $username <> "" Then
					$usn = $username
				Else
					$usn = StringMid($constr[$i], 5)
				EndIf
				$usn = StringTrimRight($usn, 1)
			EndIf
			If StringLeft($constr[$i], 3) = "PWD" Then
				If $password <> "" Then
					$pwd = $password
				Else
					$pwd = StringMid($constr[$i], 5)
				EndIf
			EndIf
			If StringLeft($constr[$i], 8) = "DATABASE" Then
				If $database <> "" Then
					$db = $database
				Else
					$db = StringMid($constr[$i], 10)
				EndIf
			EndIf
			If StringLeft($constr[$i], 6) = "SERVER" Then
				If $server <> "" Then
					$svr = $server
				Else
					$svr = StringMid($constr[$i], 8)
				EndIf
			EndIf
			If StringLeft($constr[$i], 6) = "DRIVER" Then
				If $driver <> "" Then
					$dvr = $driver
				Else
					$dvr = "{MySQL ODBC 3.51 DRIVER}"
				EndIf
			EndIf
			If StringLeft($constr[$i], 4) = "PORT" Then
				if $iport <> 0 Then
					$port = $iport
				Else
					$port = 3306
				EndIf
			EndIf
		Next
		$oConnectionObj.close
		$oConnectionObj.Open ("DATABASE=" & $db & ";DRIVER=" & $dvr & ";UID=" & $usn & ";PWD=" & $pwd & ";SERVER=" & $svr & ";PORT=" & $port & ";")
		Return $oConnectionObj
	Else
		SetError(1)
		Return -1
	EndIf
EndFunc   ;==>_ChangeCon