/**************************************************************************************
   Firebaselib - Firebase Library for Firebird SQL
   Escrito originalmente por Euler Jr
   02/Jul/2005
   verso 1.2.1


	Changes
	-------
   ************************************* 24/Nov/2005 ***********************************
   - nova funcao GetLimboTransactions() que retorna o numero de "limbo transactions", ou
   seja transacoes pendentes ( COMMIT/ROLLBACK)


	************************************* 01/Ago/2005 ***********************************
	- Incluido as funcoes:
      GetStatistic
      ListIndexFromTable
      ListFieldsFromIndex

	- Incluida versao em linguagem C (firebaselib.c e firebaselib.h)		


   ************************************* 17/Jul/2005 ***********************************
   - Incluido as funcoes:
      GetTables
      GetFieldsFromTable
      GetServiceServerVersion
      GetServiceImplementation
      GetServiceLicensedUsers
      GetServiceUserDBPath
      GetServiceEnv
      GetServiceEnvLock
      GetServiceEnvMsg
      GetServiceDBInfo
      GetServiceSvcVersion
      GetServiceConfig
      GetServiceLicense
      GetServiceUsers
      GetServiceSvrDBInfo
      GetServiceRunning
      BackupDB
      RestoreDB

   - incluido preparao dinmica dos comandos SQL
   - incluido controle de transao
   - incluido retorno do codigo de erro SQL
   - melhorado sistema de recuperacao de mensagens do servidor
   - melhorado e otimizado suporte a funcao ExecuteSQL
   - incluido novos tipos de dados do arquivo ibase.h
   - incluido suporte a varias informacoes de servio do servidor
	- incluido funcao para backup e restore


   ********************************** 13/Jul/2005 ****************************************
   - Incluido as funcoes:
      ServiceDetach
      ServiceAttach
      AddFBUser
      DeleteFBUser
      ModifyFBUserPassword
      ExecuteQuery


	************************************ 11/Jul/2005 *************************************
	- Incluido as funcoes:
	   GetIBFBVersion
	   GetPagesAllocated
	   GetBaseLevel
	   CreateDatabase
	   CreateTable


	09/Jul/2005
	- Corrigido o primeiro byte de retorno da versao
	- A funcao GetDBInfo() foi substituida por OpenDBInfo(), permanecendo com os mesmos
	  argumentos
	- Incluido novo algoritimo de captura do buffer de dados
	- Incluido novas funcoes de informacao:
	   GetCurrentMemory
	   GetForcedWrites
	   GetReads
	   GetODSVersion
	   GetPageSize
	   GetODSMinorVersion
	   GetNumBuffers
	   GetSweepInterval
	   GetFetches
	   GetMarks
	   GetWrites
	   GetDeleteCount
	   GetExpungeCount
	   GetInsertCount
	   GetPurgeCount
	   GetUpdateCount

	- A funcao GetTextError() agora retorna a mensagem de erro gerada pelo servidor


   Contribuies:
   --------------
   ...

   Esta biblioteca foi elaborada com o propsito de obter informaes adicionais
   como, por exemplo:
   - verso do BD
   - quantidade de usurios conectados ao BD
   - descrio dos usurios
   - Memoria utilizada
   - Forced writes
   - Reads
   - Versao ODS
   - Tamanho da pagina
   - Numero de buffers
   - Intervalo sweep
   - Fetches
   - Marks
   - Writes
   - Qtde delete
   - Qtde insert
   - Qtde expunge
   - Qtde update
   - Msg de texto do servidor
	- Criar BD
	- Criar tabelas
   - Executar comandos SQL no servidor
   - Obter as tabelas do BD
   - Obter os campos da tabela
   - Manutencao em usuarios
   - Informaes sobre o servio do servidor
   - Obter a quantidade de BD ativos
   - Obter a quantidade de usuarios ativos
   - Efetuar backup
   - Efetuar restore
	- Estatisticas
	- Obter colunas das tabelas
	- Obter indices das tabelas

   Histrico
   ---------
   Com o intuito de auxiliar a comunidade Firebird, nasceu a idia no forum
   lista@firebase.com.br, de se desenvolver uma biblioteca que fornecesse
   informaes sobre o BD, geralmente no disponveis nos componentes de
   acesso (Delphi, VB, C++ Builder, Kylix, etc).

   Esta biblioteca pode ser utilizada por qualquer linguagem de programao que
   suporte vnculo dinmico; DLL para Win32 e shared object (so) para Linux.


   Referencias:
   ------------
   A API do Firebird  composta de funes escritas em C/C++. Por este motivo
   decide utilizar a linguagem Object Pascal, para tornar o cdigo mais
   compreensvel aos programadores que no tem conhecimento em C/C++.
   Assim a grande comunidade de programadores Delphi/Kylix e tambm C/C++,
   podero contribuir sem maiores problemas.

   Para os programadores em C/C++ estarei trabalhando numa verso para estas
   linguagens. Quem estiver interessado em iniciar, v em frente !

   Desculpem os programadores em VB, que no tem conhecimento em Object Pascal
   mas que podem contribuir para melhorar-mos nossa biblioteca.

   Esta biblioteca foi escrita utilizando-se como referncia o arquivo
   ibase.h, que faz parte da API do Firebird. Boa parte das constantes e
   tipos de dados foram importados.
   Poderemos adicionar mais funcionalidades a esta biblioteca, dependendo
   da necessidade. Isso  s o comeo !


   Referencia: ibase.h e API Guide


   PARA MANTERMOS UM NVEL DE ORGANIZAO, GOSTARIA DE SER NOTIFICADO SOBRE
   QUALQUER ALTERAO NESTA BIBLIOTECA. ASSIM PODEREMOS EFETUAR O CONTROLE
   DE VERSO E NOTIFICAO DE "FIXED BUGS". TODA E QUALQUER CONTRIBUICAO
   SER ACEITA (OTIMIZAO, NOVAS FUNES, TIPOS DE DADOS, ETC). SOMENTE
   FIQUEM ATENTOS QUANTO A UTILIZAO DE OBJETOS E TIPOS COMPLEXOS, ALOCAO
   DE MEMRIA E COIAS DO GNERO, PARA NO GERARMOS UMA "EXCEPTION" OU "SIGNED",
   QUE PODERIA "DERRUBAR" O SERVIDOR FIREBIRD SQL.


   TODAS AS FUNES EXPORTADAS RETORNAM 0 (ZERO) EM CASO DE SUCESSO OU
   < 0 SE FALHAR.
   O VALOR -1  O DEFAULT QUANDO  GERADO UMA EXCESSO E OS ERROS REPORTADOS
   PELO BANCO DE DADOS  TRATADO PELA API isc_sqlcode().

   O STATUS DE RETORNO DE CADA FUNO SER ARMAZENADO NO PONTEIRO STATUS_VECTOR.
   SEMPRE VERIFIQUE O RETORNO DE QUALQUER FUNO DA API. SE:

   ( ( STATUS_VECTOR[ 0 ] == 1 ) && ( STATUS_VECTOR[ 1 ] > 0 ) )

   A FUNO FALHOU !



   -----------------------------------------------------------------------------------
   Funcoes exportadas
	Prototipo das funcoes em Object Pascal
	Para Win32 as chamadas devem seguir o modelo stdcall e cdecl para Linux
   -----------------------------------------------------------------------------------
   function OpenDBInfo(const DBName,UserName,Password:String):LongInt;
   function CreateDatabase(const database_name,user_name,password:String):LongInt;
   function CreateTable(const table_name:String;dbfields:TDBFields):LongInt;
   function GetFBVersion():String;
   function GetIBFBVersion():String;
   function CloseDBInfo():LongInt;
   function GetCountUserConnected():LongInt;
   function GetCurrentMemory():LongInt;
   function GetForcedWrites():LongInt;
   function GetReads():LongInt;
   function GetODSVersion():LongInt;
   function GetUserNameConnected():String;
   function GetTextError():String;
   function GetPageSize():LongInt;
   function GetODSMinorVersion():LongInt;
   function GetNumBuffers():LongInt;
   function GetSweepInterval():LongInt;
   function GetFetches():LongInt;
   function GetMarks():LongInt;
   function GetWrites():LongInt;
   function GetDeleteCount():LongInt;
   function GetExpungeCount():LongInt;
   function GetInsertCount():LongInt;
   function GetPurgeCount():LongInt;
   function GetUpdateCount():LongInt;
   function GetPagesAllocated():LongInt;
   function GetBaseLevel():LongInt;
   function AddFBUser(const user_name,password:String):LongInt;
   function ServiceDetach():LongInt;
   function ServiceAttach(const user_name,password,hostname:String;ServiceType:ShortInt):LongInt;
   function ExecuteQuery(const stm:String):LongInt;
   function ModifyFBUserPassword(const user_name,password:String):LongInt;
   function GetTables(const TableName:String = ''):String;
   function GetFieldsFromTable(const TableName:String):String;
   function GetServiceServerVersion():String;
   function GetServiceImplementation():String;
   function GetServiceLicensedUsers():String;
   function GetServiceUserDBPath():String;
   function GetServiceEnv():String;
   function GetServiceEnvLock():String;
   function GetServiceEnvMsg():String;
   function GetServiceDBInfo():String;
   function GetServiceSvcVersion():String;
   function GetServiceConfig():String;
   function GetServiceLicense():String;
   function GetServiceUsers():String;
   function GetServiceSvrDBInfo():String;
   function GetServiceRunning():String;
   function BackupDB(const db_name:String):LongInt;
   function RestoreDB(const db_name_source,db_name_restore:String):LongInt;
   function GetStatistic(const Option:Byte = 1):String;
   function ListIndexFromTable(const TableName:String):String;
   function ListFieldsFromIndex(const IndexNames:String):String;
   -----------------------------------------------------------------------------------

   Crticas, sugestes e "bugs" podem ser enviados para:
   euler@sig.inf.br
   eulersaraiva@ig.com.br


   Enjoy!
**************************************************************************************/
