8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-02-02 10:00:38 +01:00

Rework of ib_util changes. Dynamically load it in the engine and inform callback functions to alloc and free memory. Allocate memory from the default pool.

This commit is contained in:
asfernandes 2008-07-12 21:23:42 +00:00
parent 1b2089214c
commit 8f9b451ce9
29 changed files with 471 additions and 384 deletions

View File

@ -49,16 +49,8 @@ UTIL_Files = ib_util.cpp
UTIL_Sources = $(addprefix extlib/, $(UTIL_Files))
UTIL_Objects = $(addprefix $(OBJ)/, $(addsuffix .o, $(basename $(UTIL_Sources))))
COMMON_Files = fb_exception.cpp
COMMON_Sources = $(addprefix common/, $(COMMON_Files))
COMMON_Objects = $(addprefix $(OBJ)/, $(addsuffix .o, $(basename $(COMMON_Sources))))
CLASSES_Files = alloc.cpp init.cpp locks.cpp
CLASSES_Sources = $(addprefix common/classes/, $(CLASSES_Files))
CLASSES_Objects = $(addprefix $(OBJ)/, $(addsuffix .o, $(basename $(CLASSES_Sources))))
AllObjects = $(UDF_Objects) $(UTIL_Objects) $(COMMON_Objects) $(CLASSES_Objects) $(FBUDF_Objects)
AllObjects = $(UDF_Objects) $(UTIL_Objects) $(FBUDF_Objects)
Dependencies = $(AllObjects:.o=.d)

View File

@ -46,10 +46,10 @@ SERVER_Objects = $(addprefix $(OBJ)/, $(addsuffix .o, $(basename $(SERVER_Source
.PHONY: fbserver
fbserver : $(LIBIBUTIL_SO) $(FB_SUPER_SERVER)
fbserver : $(FB_SUPER_SERVER)
$(FB_SUPER_SERVER): $(SERVER_Objects)
$(EXE_LINK) $(LINK_OPTS) $^ -o $@ -L$(LIB) -lib_util $(LIB_GUI) $(LINK_LIBS) $(ICU_LIBS)
$(EXE_LINK) $(LINK_OPTS) $^ -o $@ -L$(LIB) $(LIB_GUI) $(LINK_LIBS) $(ICU_LIBS)
AllObjects = $(SERVER_Objects)

View File

@ -65,10 +65,10 @@ $(LIBFBEMBED_SO): $(LIBFBEMBED_Objects) $(SERVER_Objects) $(COMMON_Objects)
ifeq ($(PLATFORM),DARWIN)
$(LIB_LINK) $(LINK_FIREBIRD_EMBED_SYMBOLS) $(LIB_LINK_OPTIONS) \
$(LIB_EMBED_LINK_OPTIONS) $(LIB_LINK_SONAME) \
-o $@ $^ -L$(LIB) $(LIB_GUI) $(SO_LINK_LIBS) $(ICU_LIBS) -lib_util
-o $@ $^ -L$(LIB) $(LIB_GUI) $(SO_LINK_LIBS) $(ICU_LIBS)
else
$(LIB_LINK) $(LINK_FIREBIRD_SYMBOLS) $(LIB_LINK_OPTIONS) $(LIB_LINK_SONAME)$(SharedLibrarySoName) \
$(LIB_LINK_RPATH)$(FirebirdInstallPrefix)/lib -o $@ $^ -L$(LIB) $(LIB_GUI) $(SO_LINK_LIBS) $(ICU_LIBS) -lib_util
$(LIB_LINK_RPATH)$(FirebirdInstallPrefix)/lib -o $@ $^ -L$(LIB) $(LIB_GUI) $(SO_LINK_LIBS) $(ICU_LIBS)
endif
$(LIBFBEMBED_SOBASENAME): $(LIBFBEMBED_SO)
(cd $(LIB) && $(LN) -f $(SharedLibraryName) $(SharedLibrarySoName) )

View File

@ -22,5 +22,5 @@
# Adriano dos Santos Fernandes
_ib_util_malloc
_ib_util_free
_ib_util_init

View File

@ -27,5 +27,5 @@
+e ib_util_malloc
+e ib_util_free
+e ib_util_init

View File

@ -28,7 +28,7 @@
{
global:
ib_util_malloc;
ib_util_free;
ib_util_init;
local:
*;

View File

@ -270,7 +270,7 @@ LIB_LINK_OPTIONS = $(LDFLAGS) $(THR_FLAGS) -shared
LIB_LINK_RPATH = -Wl,-rpath,
LIB_LINK_SONAME = -Wl,-soname,
LIB_LINK_MAPFILE= -Wl,--version-script,
FBEMBED_LINK= -L$(LIB) -lfbembed -lib_util
FBEMBED_LINK= -L$(LIB) -lfbembed
FB_SUPER_SERVER = $(BIN)/fbserver$(EXEC_EXT)
FB_CLASSIC_SERVER = $(BIN)/fb_inet_server$(EXEC_EXT)

View File

@ -334,8 +334,7 @@ LIBFBSTATIC_Objects = $(OS_SPECIFIC_Objects) \
$(GPRELIB_Objects) \
$(FBCONFIG_Objects) \
$(CLUMPLETS_Objects) \
$(UTIL_Objects) \
$(IBUTIL_Objects)
$(UTIL_Objects)
# Not needed since loaded into libfbmemory.a already

View File

@ -46,7 +46,7 @@ LINK_FBINTL_SYMBOLS=$(LIB_LINK_MAPFILE)$(ROOT)/builds/posix/fbintl.darwin.vers
LIB_LINK_RPATH:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Libraries/
LIB_EMBED_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird
LIB_CLIENT_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird
FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed -lib_util
FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed
PLATFORM_FALLBACK=os/posix
PLAT_CLASSIC_PRE_TARGET=darwin_setup_framework
PLAT_CLASSIC_POST_TARGET=darwin_finish_cs_framework

View File

@ -60,7 +60,7 @@ LINK_IBUTIL_SYMBOLS=$(LIB_LINK_MAPFILE)$(ROOT)/builds/posix/ib_util.darwin.vers
LIB_LINK_RPATH:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Libraries/
LIB_EMBED_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird
LIB_CLIENT_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird
FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed -lib_util
FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed
PLATFORM_FALLBACK=os/posix
PLAT_CLASSIC_PRE_TARGET=darwin_setup_framework
PLAT_CLASSIC_POST_TARGET=darwin_finish_cs_framework

View File

@ -58,7 +58,7 @@ LINK_IBUTIL_SYMBOLS=$(LIB_LINK_MAPFILE)$(ROOT)/builds/posix/ib_util.darwin.vers
LIB_LINK_RPATH:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Libraries/
LIB_EMBED_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird
LIB_CLIENT_LINK_OPTIONS:=-install_name /Library/Frameworks/Firebird.framework/Versions/A/Firebird
FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed -lib_util
FBEMBED_LINK:=-F../gen/firebird -framework Firebird -L$(LIB) -lfbembed
PLATFORM_FALLBACK=os/posix
PLAT_CLASSIC_PRE_TARGET=darwin_setup_framework
PLAT_CLASSIC_POST_TARGET=darwin_finish_cs_framework

View File

@ -17,4 +17,4 @@
EXPORTS
ib_util_malloc
ib_util_free
ib_util_init

View File

@ -1,5 +1,5 @@
Microsoft Visual Studio Solution File, Format Version 9.00
# Visual Studio 2005
# Visual C++ Express 2005
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "alice", "alice.vcproj", "{0D616380-1A5A-4230-A80B-021360E4E669}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "burp", "burp.vcproj", "{D1507562-A363-4685-96AF-B036F5E5E47F}"
@ -21,15 +21,14 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fb_inet_server", "fb_inet_server.vcproj", "{664D4A04-36E0-48EF-8BCA-D5C331EFAA24}"
ProjectSection(ProjectDependencies) = postProject
{3C4993E4-946C-4029-97B8-1A111F32F4FC} = {3C4993E4-946C-4029-97B8-1A111F32F4FC}
{EABA0FF3-1C4D-4FAB-8418-31C9061F3F0D} = {EABA0FF3-1C4D-4FAB-8418-31C9061F3F0D}
{E9AAC310-465E-4384-8BCC-674F297F777C} = {E9AAC310-465E-4384-8BCC-674F297F777C}
{213C6F21-D83F-48C7-BBB5-B35AB1B706B1} = {213C6F21-D83F-48C7-BBB5-B35AB1B706B1}
{D1507562-A363-4685-96AF-B036F5E5E47F} = {D1507562-A363-4685-96AF-B036F5E5E47F}
{F5746066-8613-4811-B27C-0ED70FF9F0FF} = {F5746066-8613-4811-B27C-0ED70FF9F0FF}
{0D616380-1A5A-4230-A80B-021360E4E669} = {0D616380-1A5A-4230-A80B-021360E4E669}
{E83187C1-AAC2-445D-B8B2-883EFC10C39A} = {E83187C1-AAC2-445D-B8B2-883EFC10C39A}
{488199DD-D9F3-41C8-AED6-8AFFFB294CFF} = {488199DD-D9F3-41C8-AED6-8AFFFB294CFF}
{E029E4E2-0C3F-4F7D-BC4C-D9C20F40EB4E} = {E029E4E2-0C3F-4F7D-BC4C-D9C20F40EB4E}
{488199DD-D9F3-41C8-AED6-8AFFFB294CFF} = {488199DD-D9F3-41C8-AED6-8AFFFB294CFF}
{E83187C1-AAC2-445D-B8B2-883EFC10C39A} = {E83187C1-AAC2-445D-B8B2-883EFC10C39A}
{0D616380-1A5A-4230-A80B-021360E4E669} = {0D616380-1A5A-4230-A80B-021360E4E669}
{F5746066-8613-4811-B27C-0ED70FF9F0FF} = {F5746066-8613-4811-B27C-0ED70FF9F0FF}
{D1507562-A363-4685-96AF-B036F5E5E47F} = {D1507562-A363-4685-96AF-B036F5E5E47F}
{213C6F21-D83F-48C7-BBB5-B35AB1B706B1} = {213C6F21-D83F-48C7-BBB5-B35AB1B706B1}
{E9AAC310-465E-4384-8BCC-674F297F777C} = {E9AAC310-465E-4384-8BCC-674F297F777C}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fb_lock_print", "fb_lock_print.vcproj", "{E8397148-0E9C-449B-9F45-7FB377A08242}"
@ -45,33 +44,31 @@ EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fbembed", "fbembed.vcproj", "{C5A60E3D-7815-4127-B856-96277BEC1D11}"
ProjectSection(ProjectDependencies) = postProject
{E83187C1-AAC2-445D-B8B2-883EFC10C39A} = {E83187C1-AAC2-445D-B8B2-883EFC10C39A}
{EABA0FF3-1C4D-4FAB-8418-31C9061F3F0D} = {EABA0FF3-1C4D-4FAB-8418-31C9061F3F0D}
{520DF501-5775-44FD-BDC6-37753A17696A} = {520DF501-5775-44FD-BDC6-37753A17696A}
{B0833E27-BCB2-4D0D-B6D2-F4621224CFD8} = {B0833E27-BCB2-4D0D-B6D2-F4621224CFD8}
{604E1144-1A22-43AF-9A3E-08650EE4EE90} = {604E1144-1A22-43AF-9A3E-08650EE4EE90}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{F55ACA54-70DF-4343-8E16-FA97C757CCF6} = {F55ACA54-70DF-4343-8E16-FA97C757CCF6}
{D1507562-A363-4685-96AF-B036F5E5E47F} = {D1507562-A363-4685-96AF-B036F5E5E47F}
{0D616380-1A5A-4230-A80B-021360E4E669} = {0D616380-1A5A-4230-A80B-021360E4E669}
{D1507562-A363-4685-96AF-B036F5E5E47F} = {D1507562-A363-4685-96AF-B036F5E5E47F}
{F55ACA54-70DF-4343-8E16-FA97C757CCF6} = {F55ACA54-70DF-4343-8E16-FA97C757CCF6}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{604E1144-1A22-43AF-9A3E-08650EE4EE90} = {604E1144-1A22-43AF-9A3E-08650EE4EE90}
{B0833E27-BCB2-4D0D-B6D2-F4621224CFD8} = {B0833E27-BCB2-4D0D-B6D2-F4621224CFD8}
{520DF501-5775-44FD-BDC6-37753A17696A} = {520DF501-5775-44FD-BDC6-37753A17696A}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fbguard", "fbguard.vcproj", "{BBD83ED3-8A48-4FE8-B4B7-CB27730986B2}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fbserver", "fbserver.vcproj", "{23EC8DAA-6718-4EF3-979F-89F611C7D504}"
ProjectSection(ProjectDependencies) = postProject
{E9AAC310-465E-4384-8BCC-674F297F777C} = {E9AAC310-465E-4384-8BCC-674F297F777C}
{4BCC693D-1745-45ED-8302-E5E2F979549A} = {4BCC693D-1745-45ED-8302-E5E2F979549A}
{604E1144-1A22-43AF-9A3E-08650EE4EE90} = {604E1144-1A22-43AF-9A3E-08650EE4EE90}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{F8798A49-9D20-451E-A7BD-FEB5237103B5} = {F8798A49-9D20-451E-A7BD-FEB5237103B5}
{D1507562-A363-4685-96AF-B036F5E5E47F} = {D1507562-A363-4685-96AF-B036F5E5E47F}
{0D616380-1A5A-4230-A80B-021360E4E669} = {0D616380-1A5A-4230-A80B-021360E4E669}
{E83187C1-AAC2-445D-B8B2-883EFC10C39A} = {E83187C1-AAC2-445D-B8B2-883EFC10C39A}
{EABA0FF3-1C4D-4FAB-8418-31C9061F3F0D} = {EABA0FF3-1C4D-4FAB-8418-31C9061F3F0D}
{0D616380-1A5A-4230-A80B-021360E4E669} = {0D616380-1A5A-4230-A80B-021360E4E669}
{D1507562-A363-4685-96AF-B036F5E5E47F} = {D1507562-A363-4685-96AF-B036F5E5E47F}
{F8798A49-9D20-451E-A7BD-FEB5237103B5} = {F8798A49-9D20-451E-A7BD-FEB5237103B5}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{604E1144-1A22-43AF-9A3E-08650EE4EE90} = {604E1144-1A22-43AF-9A3E-08650EE4EE90}
{4BCC693D-1745-45ED-8302-E5E2F979549A} = {4BCC693D-1745-45ED-8302-E5E2F979549A}
{E9AAC310-465E-4384-8BCC-674F297F777C} = {E9AAC310-465E-4384-8BCC-674F297F777C}
{520DF501-5775-44FD-BDC6-37753A17696A} = {520DF501-5775-44FD-BDC6-37753A17696A}
EndProjectSection
EndProject
@ -79,40 +76,40 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fbudf", "fbudf.vcproj", "{9
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gbak", "gbak.vcproj", "{B732F5D2-B5D9-417F-B156-D790F466CB8E}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gdef", "gdef.vcproj", "{E8B8E0CE-F47F-48BD-8911-C11805A711D9}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gfix", "gfix.vcproj", "{44A9E4AD-B932-4620-B319-431A153BB341}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gpre", "gpre.vcproj", "{D84F0839-28A4-40B2-B5F4-F5E1E7F48FD0}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gsec", "gsec.vcproj", "{7043CC61-DEC1-4C6B-86B9-0E911D1094C9}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gsplit", "gsplit.vcproj", "{B7F22B7F-9937-4874-9A8B-6AB4E36E74A5}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "gstat", "gstat.vcproj", "{7E862973-37C4-4202-80E7-490ED4DEDA14}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ib_udf", "ib_udf.vcproj", "{0D4A2D8E-6461-479E-9399-F7929174E050}"
@ -133,8 +130,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "intl", "intl.vcproj", "{DFF
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "isql", "isql.vcproj", "{DEE75AD5-F165-40E1-80B2-400E27725D5C}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lock", "lock.vcproj", "{604E1144-1A22-43AF-9A3E-08650EE4EE90}"
@ -143,8 +140,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "lock_classic", "lock_classi
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "qli", "qli.vcproj", "{EBB8361B-49D5-43A5-8771-940DF3E308EF}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "remote", "remote.vcproj", "{4BCC693D-1745-45ED-8302-E5E2F979549A}"
@ -155,8 +152,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "utilities", "utilities.vcpr
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "nbackup", "nbackup.vcproj", "{01A41DFA-8908-4576-A1F1-C8BC7EAE39A1}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "config", "config.vcproj", "{E83187C1-AAC2-445D-B8B2-883EFC10C39A}"
@ -174,8 +171,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fbrmclib", "fbrmclib.vcproj
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "fbsvcmgr", "fbsvcmgr.vcproj", "{EFB07DBC-36E3-4C54-B941-3CDAFAACF47B}"
ProjectSection(ProjectDependencies) = postProject
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
{492E7BDA-8948-408D-A43E-4C0A5B86AFB8} = {492E7BDA-8948-408D-A43E-4C0A5B86AFB8}
{15605F44-BFFD-444F-AD4C-55DC9D704465} = {15605F44-BFFD-444F-AD4C-55DC9D704465}
EndProjectSection
EndProject
Global

View File

@ -1278,6 +1278,8 @@ C --
PARAMETER (GDS__modnotfound = 335544932)
INTEGER*4 GDS__nothing_to_cancel
PARAMETER (GDS__nothing_to_cancel = 335544933)
INTEGER*4 GDS__ibutil_not_loaded
PARAMETER (GDS__ibutil_not_loaded = 335544934)
INTEGER*4 GDS__gfix_db_name
PARAMETER (GDS__gfix_db_name = 335740929)
INTEGER*4 GDS__gfix_invalid_sw

View File

@ -646,6 +646,7 @@ const
gds_montabexh = 335544931;
gds_modnotfound = 335544932;
gds_nothing_to_cancel = 335544933;
gds_ibutil_not_loaded = 335544934;
gds_gfix_db_name = 335740929;
gds_gfix_invalid_sw = 335740930;
gds_gfix_incmp_sw = 335740932;

View File

@ -22,53 +22,19 @@
#include "ib_udf.h"
#include "firebird.h"
#include "../jrd/common.h"
#include "../common/classes/array.h"
#include "../common/classes/init.h"
#include "../common/classes/locks.h"
using namespace Firebird;
namespace
// initialized by the engine
static void* (*allocFunc)(long) = NULL;
extern "C" void EXPORT ib_util_init(void* (*aAllocFunc)(long))
{
GlobalPtr<Mutex> mutex;
InitInstance<SortedArray<void*> > pointers;
allocFunc = aAllocFunc;
}
extern "C" void* EXPORT ib_util_malloc(long size)
{
void* const ptr = malloc(size);
if (ptr)
{
Firebird::MutexLockGuard guard(mutex);
pointers().add(ptr);
}
return ptr;
}
extern "C" int EXPORT ib_util_free(void* ptr)
{
if (!ptr)
return true;
bool found = false;
{ // scope
Firebird::MutexLockGuard guard(mutex);
size_t pos;
if (pointers().find(ptr, pos))
{
pointers().remove(pos);
found = true;
}
}
if (found)
free(ptr);
return found;
return allocFunc ? allocFunc(size) : NULL;
}

View File

@ -635,6 +635,7 @@ static const struct {
{"montabexh", 335544931},
{"modnotfound", 335544932},
{"nothing_to_cancel", 335544933},
{"ibutil_not_loaded", 335544934},
{"gfix_db_name", 335740929},
{"gfix_invalid_sw", 335740930},
{"gfix_incmp_sw", 335740932},

View File

@ -669,6 +669,7 @@ const ISC_STATUS isc_too_big_blr = 335544930L;
const ISC_STATUS isc_montabexh = 335544931L;
const ISC_STATUS isc_modnotfound = 335544932L;
const ISC_STATUS isc_nothing_to_cancel = 335544933L;
const ISC_STATUS isc_ibutil_not_loaded = 335544934L;
const ISC_STATUS isc_gfix_db_name = 335740929L;
const ISC_STATUS isc_gfix_invalid_sw = 335740930L;
const ISC_STATUS isc_gfix_incmp_sw = 335740932L;
@ -941,7 +942,7 @@ const ISC_STATUS isc_fbsvcmgr_info_err = 336986116L;
const ISC_STATUS isc_fbsvcmgr_query_err = 336986117L;
const ISC_STATUS isc_fbsvcmgr_switch_unknown = 336986118L;
const ISC_STATUS isc_utl_trusted_switch = 337051649L;
const ISC_STATUS isc_err_max = 885;
const ISC_STATUS isc_err_max = 886;
#else /* c definitions */
@ -1580,6 +1581,7 @@ const ISC_STATUS isc_err_max = 885;
#define isc_montabexh 335544931L
#define isc_modnotfound 335544932L
#define isc_nothing_to_cancel 335544933L
#define isc_ibutil_not_loaded 335544934L
#define isc_gfix_db_name 335740929L
#define isc_gfix_invalid_sw 335740930L
#define isc_gfix_incmp_sw 335740932L
@ -1852,7 +1854,7 @@ const ISC_STATUS isc_err_max = 885;
#define isc_fbsvcmgr_query_err 336986117L
#define isc_fbsvcmgr_switch_unknown 336986118L
#define isc_utl_trusted_switch 337051649L
#define isc_err_max 885
#define isc_err_max 886
#endif

View File

@ -635,277 +635,278 @@ static const struct {
{335544931, "Monitoring table space exhausted"}, /* 611, montabexh */
{335544932, "module name or entrypoint could not be found"}, /* 612, modnotfound */
{335544933, "nothing to cancel"}, /* 613, nothing_to_cancel */
{335740929, "data base file name (@1) already given"}, /* 614, gfix_db_name */
{335740930, "invalid switch @1"}, /* 615, gfix_invalid_sw */
{335740932, "incompatible switch combination"}, /* 616, gfix_incmp_sw */
{335740933, "replay log pathname required"}, /* 617, gfix_replay_req */
{335740934, "number of page buffers for cache required"}, /* 618, gfix_pgbuf_req */
{335740935, "numeric value required"}, /* 619, gfix_val_req */
{335740936, "positive numeric value required"}, /* 620, gfix_pval_req */
{335740937, "number of transactions per sweep required"}, /* 621, gfix_trn_req */
{335740940, "\"full\" or \"reserve\" required"}, /* 622, gfix_full_req */
{335740941, "user name required"}, /* 623, gfix_usrname_req */
{335740942, "password required"}, /* 624, gfix_pass_req */
{335740943, "subsystem name"}, /* 625, gfix_subs_name */
{335740944, "\"wal\" required"}, /* 626, gfix_wal_req */
{335740945, "number of seconds required"}, /* 627, gfix_sec_req */
{335740946, "numeric value between 0 and 32767 inclusive required"}, /* 628, gfix_nval_req */
{335740947, "must specify type of shutdown"}, /* 629, gfix_type_shut */
{335740948, "please retry, specifying an option"}, /* 630, gfix_retry */
{335740951, "please retry, giving a database name"}, /* 631, gfix_retry_db */
{335740991, "internal block exceeds maximum size"}, /* 632, gfix_exceed_max */
{335740992, "corrupt pool"}, /* 633, gfix_corrupt_pool */
{335740993, "virtual memory exhausted"}, /* 634, gfix_mem_exhausted */
{335740994, "bad pool id"}, /* 635, gfix_bad_pool */
{335740995, "Transaction state @1 not in valid range."}, /* 636, gfix_trn_not_valid */
{335741012, "unexpected end of input"}, /* 637, gfix_unexp_eoi */
{335741018, "failed to reconnect to a transaction in database @1"}, /* 638, gfix_recon_fail */
{335741036, "Transaction description item unknown"}, /* 639, gfix_trn_unknown */
{335741038, "\"read_only\" or \"read_write\" required"}, /* 640, gfix_mode_req */
{335741039, " -sql_dialect set database dialect n"}, /* 641, gfix_opt_SQL_dialect */
{335741042, "positive or zero numeric value required"}, /* 642, gfix_pzval_req */
{336003074, "Cannot SELECT RDB$DB_KEY from a stored procedure."}, /* 643, dsql_dbkey_from_non_table */
{336003075, "Precision 10 to 18 changed from DOUBLE PRECISION in SQL dialect 1 to 64-bit scaled integer in SQL dialect 3"}, /* 644, dsql_transitional_numeric */
{336003076, "Use of @1 expression that returns different results in dialect 1 and dialect 3"}, /* 645, dsql_dialect_warning_expr */
{336003077, "Database SQL dialect @1 does not support reference to @2 datatype"}, /* 646, sql_db_dialect_dtype_unsupport */
{336003079, "DB dialect @1 and client dialect @2 conflict with respect to numeric precision @3."}, /* 647, isc_sql_dialect_conflict_num */
{336003080, "WARNING: Numeric literal @1 is interpreted as a floating-point"}, /* 648, dsql_warning_number_ambiguous */
{336003081, "value in SQL dialect 1, but as an exact numeric value in SQL dialect 3."}, /* 649, dsql_warning_number_ambiguous1 */
{336003082, "WARNING: NUMERIC and DECIMAL fields with precision 10 or greater are stored"}, /* 650, dsql_warn_precision_ambiguous */
{336003083, "as approximate floating-point values in SQL dialect 1, but as 64-bit"}, /* 651, dsql_warn_precision_ambiguous1 */
{336003084, "integers in SQL dialect 3."}, /* 652, dsql_warn_precision_ambiguous2 */
{336003085, "Ambiguous field name between @1 and @2"}, /* 653, dsql_ambiguous_field_name */
{336003086, "External function should have return position between 1 and @1"}, /* 654, dsql_udf_return_pos_err */
{336003087, "Label @1 @2 in the current scope"}, /* 655, dsql_invalid_label */
{336003088, "Datatypes @1are not comparable in expression @2"}, /* 656, dsql_datatypes_not_comparable */
{336003089, "Empty cursor name is not allowed"}, /* 657, dsql_cursor_invalid */
{336003090, "Statement already has a cursor @1 assigned"}, /* 658, dsql_cursor_redefined */
{336003091, "Cursor @1 is not found in the current context"}, /* 659, dsql_cursor_not_found */
{336003092, "Cursor @1 already exists in the current context"}, /* 660, dsql_cursor_exists */
{336003093, "Relation @1 is ambiguous in cursor @2"}, /* 661, dsql_cursor_rel_ambiguous */
{336003094, "Relation @1 is not found in cursor @2"}, /* 662, dsql_cursor_rel_not_found */
{336003095, "Cursor is not open"}, /* 663, dsql_cursor_not_open */
{336003096, "Data type @1 is not supported for EXTERNAL TABLES. Relation '@2', field '@3'"}, /* 664, dsql_type_not_supp_ext_tab */
{336003097, "Feature not supported on ODS version older than @1.@2"}, /* 665, dsql_feature_not_supported_ods */
{336003098, "Primary key required on table @1"}, /* 666, primary_key_required */
{336003099, "UPDATE OR INSERT field list does not match primary key of table @1"}, /* 667, upd_ins_doesnt_match_pk */
{336003100, "UPDATE OR INSERT field list does not match MATCHING clause"}, /* 668, upd_ins_doesnt_match_matching */
{336003101, "UPDATE OR INSERT without MATCHING could not be used with views based on more than one table"}, /* 669, upd_ins_with_complex_view */
{336003102, "Incompatible trigger type"}, /* 670, dsql_incompatible_trigger_type */
{336003103, "Database trigger type can't be changed"}, /* 671, dsql_db_trigger_type_cant_change */
{336068740, "Table @1 already exists"}, /* 672, dyn_dup_table */
{336068784, "column @1 does not exist in table/view @2"}, /* 673, dyn_column_does_not_exist */
{336068796, "SQL role @1 does not exist"}, /* 674, dyn_role_does_not_exist */
{336068797, "user @1 has no grant admin option on SQL role @2"}, /* 675, dyn_no_grant_admin_opt */
{336068798, "user @1 is not a member of SQL role @2"}, /* 676, dyn_user_not_role_member */
{336068799, "@1 is not the owner of SQL role @2"}, /* 677, dyn_delete_role_failed */
{336068800, "@1 is a SQL role and not a user"}, /* 678, dyn_grant_role_to_user */
{336068801, "user name @1 could not be used for SQL role"}, /* 679, dyn_inv_sql_role_name */
{336068802, "SQL role @1 already exists"}, /* 680, dyn_dup_sql_role */
{336068803, "keyword @1 can not be used as a SQL role name"}, /* 681, dyn_kywd_spec_for_role */
{336068804, "SQL roles are not supported in on older versions of the database. A backup and restore of the database is required."}, /* 682, dyn_roles_not_supported */
{336068812, "Cannot rename domain @1 to @2. A domain with that name already exists."}, /* 683, dyn_domain_name_exists */
{336068813, "Cannot rename column @1 to @2. A column with that name already exists in table @3."}, /* 684, dyn_field_name_exists */
{336068814, "Column @1 from table @2 is referenced in @3"}, /* 685, dyn_dependency_exists */
{336068815, "Cannot change datatype for column @1. Changing datatype is not supported for BLOB or ARRAY columns."}, /* 686, dyn_dtype_invalid */
{336068816, "New size specified for column @1 must be at least @2 characters."}, /* 687, dyn_char_fld_too_small */
{336068817, "Cannot change datatype for @1. Conversion from base type @2 to @3 is not supported."}, /* 688, dyn_invalid_dtype_conversion */
{336068818, "Cannot change datatype for column @1 from a character type to a non-character type."}, /* 689, dyn_dtype_conv_invalid */
{336068820, "Zero length identifiers are not allowed"}, /* 690, dyn_zero_len_id */
{336068829, "Maximum number of collations per character set exceeded"}, /* 691, max_coll_per_charset */
{336068830, "Invalid collation attributes"}, /* 692, invalid_coll_attr */
{336068840, "@1 cannot reference @2"}, /* 693, dyn_wrong_gtt_scope */
{336068852, "New scale specified for column @1 must be at most @2."}, /* 694, dyn_scale_too_big */
{336068853, "New precision specified for column @1 must be at least @2."}, /* 695, dyn_precision_too_small */
{336068855, "Warning: @1 on @2 is not granted to @3."}, /* 696, dyn_miss_priv_warning */
{336068856, "Feature '@1' is not supported in ODS @2.@3"}, /* 697, dyn_ods_not_supp_feature */
{336068857, "Cannot add or remove COMPUTED from column @1"}, /* 698, dyn_cannot_addrem_computed */
{336068858, "Password should not be empty string"}, /* 699, dyn_no_empty_pw */
{336068859, "Index @1 already exists"}, /* 700, dyn_dup_index */
{336330753, "found unknown switch"}, /* 701, gbak_unknown_switch */
{336330754, "page size parameter missing"}, /* 702, gbak_page_size_missing */
{336330755, "Page size specified (@1) greater than limit (16384 bytes)"}, /* 703, gbak_page_size_toobig */
{336330756, "redirect location for output is not specified"}, /* 704, gbak_redir_ouput_missing */
{336330757, "conflicting switches for backup/restore"}, /* 705, gbak_switches_conflict */
{336330758, "device type @1 not known"}, /* 706, gbak_unknown_device */
{336330759, "protection is not there yet"}, /* 707, gbak_no_protection */
{336330760, "page size is allowed only on restore or create"}, /* 708, gbak_page_size_not_allowed */
{336330761, "multiple sources or destinations specified"}, /* 709, gbak_multi_source_dest */
{336330762, "requires both input and output filenames"}, /* 710, gbak_filename_missing */
{336330763, "input and output have the same name. Disallowed."}, /* 711, gbak_dup_inout_names */
{336330764, "expected page size, encountered \"@1\""}, /* 712, gbak_inv_page_size */
{336330765, "REPLACE specified, but the first file @1 is a database"}, /* 713, gbak_db_specified */
{336330766, "database @1 already exists. To replace it, use the -REP switch"}, /* 714, gbak_db_exists */
{336330767, "device type not specified"}, /* 715, gbak_unk_device */
{336330772, "gds_$blob_info failed"}, /* 716, gbak_blob_info_failed */
{336330773, "do not understand BLOB INFO item @1"}, /* 717, gbak_unk_blob_item */
{336330774, "gds_$get_segment failed"}, /* 718, gbak_get_seg_failed */
{336330775, "gds_$close_blob failed"}, /* 719, gbak_close_blob_failed */
{336330776, "gds_$open_blob failed"}, /* 720, gbak_open_blob_failed */
{336330777, "Failed in put_blr_gen_id"}, /* 721, gbak_put_blr_gen_id_failed */
{336330778, "data type @1 not understood"}, /* 722, gbak_unk_type */
{336330779, "gds_$compile_request failed"}, /* 723, gbak_comp_req_failed */
{336330780, "gds_$start_request failed"}, /* 724, gbak_start_req_failed */
{336330781, "gds_$receive failed"}, /* 725, gbak_rec_failed */
{336330782, "gds_$release_request failed"}, /* 726, gbak_rel_req_failed */
{336330783, "gds_$database_info failed"}, /* 727, gbak_db_info_failed */
{336330784, "Expected database description record"}, /* 728, gbak_no_db_desc */
{336330785, "failed to create database @1"}, /* 729, gbak_db_create_failed */
{336330786, "RESTORE: decompression length error"}, /* 730, gbak_decomp_len_error */
{336330787, "cannot find table @1"}, /* 731, gbak_tbl_missing */
{336330788, "Cannot find column for BLOB"}, /* 732, gbak_blob_col_missing */
{336330789, "gds_$create_blob failed"}, /* 733, gbak_create_blob_failed */
{336330790, "gds_$put_segment failed"}, /* 734, gbak_put_seg_failed */
{336330791, "expected record length"}, /* 735, gbak_rec_len_exp */
{336330792, "wrong length record, expected @1 encountered @2"}, /* 736, gbak_inv_rec_len */
{336330793, "expected data attribute"}, /* 737, gbak_exp_data_type */
{336330794, "Failed in store_blr_gen_id"}, /* 738, gbak_gen_id_failed */
{336330795, "do not recognize record type @1"}, /* 739, gbak_unk_rec_type */
{336330796, "Expected backup version 1..8. Found @1"}, /* 740, gbak_inv_bkup_ver */
{336330797, "expected backup description record"}, /* 741, gbak_missing_bkup_desc */
{336330798, "string truncated"}, /* 742, gbak_string_trunc */
{336330799, "warning -- record could not be restored"}, /* 743, gbak_cant_rest_record */
{336330800, "gds_$send failed"}, /* 744, gbak_send_failed */
{336330801, "no table name for data"}, /* 745, gbak_no_tbl_name */
{336330802, "unexpected end of file on backup file"}, /* 746, gbak_unexp_eof */
{336330803, "database format @1 is too old to restore to"}, /* 747, gbak_db_format_too_old */
{336330804, "array dimension for column @1 is invalid"}, /* 748, gbak_inv_array_dim */
{336330807, "Expected XDR record length"}, /* 749, gbak_xdr_len_expected */
{336330817, "cannot open backup file @1"}, /* 750, gbak_open_bkup_error */
{336330818, "cannot open status and error output file @1"}, /* 751, gbak_open_error */
{336330934, "blocking factor parameter missing"}, /* 752, gbak_missing_block_fac */
{336330935, "expected blocking factor, encountered \"@1\""}, /* 753, gbak_inv_block_fac */
{336330936, "a blocking factor may not be used in conjunction with device CT"}, /* 754, gbak_block_fac_specified */
{336330940, "user name parameter missing"}, /* 755, gbak_missing_username */
{336330941, "password parameter missing"}, /* 756, gbak_missing_password */
{336330952, " missing parameter for the number of bytes to be skipped"}, /* 757, gbak_missing_skipped_bytes */
{336330953, "expected number of bytes to be skipped, encountered \"@1\""}, /* 758, gbak_inv_skipped_bytes */
{336330965, "character set"}, /* 759, gbak_err_restore_charset */
{336330967, "collation"}, /* 760, gbak_err_restore_collation */
{336330972, "Unexpected I/O error while reading from backup file"}, /* 761, gbak_read_error */
{336330973, "Unexpected I/O error while writing to backup file"}, /* 762, gbak_write_error */
{336330985, "could not drop database @1 (database might be in use)"}, /* 763, gbak_db_in_use */
{336330990, "System memory exhausted"}, /* 764, gbak_sysmemex */
{336331002, "SQL role"}, /* 765, gbak_restore_role_failed */
{336331005, "SQL role parameter missing"}, /* 766, gbak_role_op_missing */
{336331010, "page buffers parameter missing"}, /* 767, gbak_page_buffers_missing */
{336331011, "expected page buffers, encountered \"@1\""}, /* 768, gbak_page_buffers_wrong_param */
{336331012, "page buffers is allowed only on restore or create"}, /* 769, gbak_page_buffers_restore */
{336331014, "size specification either missing or incorrect for file @1"}, /* 770, gbak_inv_size */
{336331015, "file @1 out of sequence"}, /* 771, gbak_file_outof_sequence */
{336331016, "can't join -- one of the files missing"}, /* 772, gbak_join_file_missing */
{336331017, " standard input is not supported when using join operation"}, /* 773, gbak_stdin_not_supptd */
{336331018, "standard output is not supported when using split operation"}, /* 774, gbak_stdout_not_supptd */
{336331019, "backup file @1 might be corrupt"}, /* 775, gbak_bkup_corrupt */
{336331020, "database file specification missing"}, /* 776, gbak_unk_db_file_spec */
{336331021, "can't write a header record to file @1"}, /* 777, gbak_hdr_write_failed */
{336331022, "free disk space exhausted"}, /* 778, gbak_disk_space_ex */
{336331023, "file size given (@1) is less than minimum allowed (@2)"}, /* 779, gbak_size_lt_min */
{336331025, "service name parameter missing"}, /* 780, gbak_svc_name_missing */
{336331026, "Cannot restore over current database, must be SYSDBA or owner of the existing database."}, /* 781, gbak_not_ownr */
{336331031, "\"read_only\" or \"read_write\" required"}, /* 782, gbak_mode_req */
{336331033, "just data ignore all constraints etc."}, /* 783, gbak_just_data */
{336331034, "restoring data only ignoring foreign key, unique, not null & other constraints"}, /* 784, gbak_data_only */
{336397205, "ODS versions before ODS@1 are not supported"}, /* 785, dsql_too_old_ods */
{336397206, "Table @1 does not exist"}, /* 786, dsql_table_not_found */
{336397207, "View @1 does not exist"}, /* 787, dsql_view_not_found */
{336397208, "At line @1, column @2"}, /* 788, dsql_line_col_error */
{336397209, "At unknown line and column"}, /* 789, dsql_unknown_pos */
{336397210, "Column @1 cannot be repeated in @2 statement"}, /* 790, dsql_no_dup_name */
{336397211, "Too many values (more than @1) in member list to match against"}, /* 791, dsql_too_many_values */
{336397212, "Array and BLOB data types not allowed in computed field"}, /* 792, dsql_no_array_computed */
{336397213, "Implicit domain name @1 not allowed in user created domain"}, /* 793, dsql_implicit_domain_name */
{336397214, "scalar operator used on field @1 which is not an array"}, /* 794, dsql_only_can_subscript_array */
{336397215, "cannot sort on more than 255 items"}, /* 795, dsql_max_sort_items */
{336397216, "cannot group on more than 255 items"}, /* 796, dsql_max_group_items */
{336397217, "Cannot include the same field (@1.@2) twice in the ORDER BY clause with conflicting sorting options"}, /* 797, dsql_conflicting_sort_field */
{336397218, "column list from derived table @1 has more columns than the number of items in its SELECT statement"}, /* 798, dsql_derived_table_more_columns */
{336397219, "column list from derived table @1 has less columns than the number of items in its SELECT statement"}, /* 799, dsql_derived_table_less_columns */
{336397220, "no column name specified for column number @1 in derived table @2"}, /* 800, dsql_derived_field_unnamed */
{336397221, "column @1 was specified multiple times for derived table @2"}, /* 801, dsql_derived_field_dup_name */
{336397222, "Internal dsql error: alias type expected by pass1_expand_select_node"}, /* 802, dsql_derived_alias_select */
{336397223, "Internal dsql error: alias type expected by pass1_field"}, /* 803, dsql_derived_alias_field */
{336397224, "Internal dsql error: column position out of range in pass1_union_auto_cast"}, /* 804, dsql_auto_field_bad_pos */
{336397225, "Recursive CTE member (@1) can refer itself only in FROM clause"}, /* 805, dsql_cte_wrong_reference */
{336397226, "CTE '@1' has cyclic dependencies"}, /* 806, dsql_cte_cycle */
{336397227, "Recursive member of CTE can't be member of an outer join"}, /* 807, dsql_cte_outer_join */
{336397228, "Recursive member of CTE can't reference itself more than once"}, /* 808, dsql_cte_mult_references */
{336397229, "Recursive CTE (@1) must be an UNION"}, /* 809, dsql_cte_not_a_union */
{336397230, "CTE '@1' defined non-recursive member after recursive"}, /* 810, dsql_cte_nonrecurs_after_recurs */
{336397231, "Recursive member of CTE '@1' has @2 clause"}, /* 811, dsql_cte_wrong_clause */
{336397232, "Recursive members of CTE (@1) must be linked with another members via UNION ALL"}, /* 812, dsql_cte_union_all */
{336397233, "Non-recursive member is missing in CTE '@1'"}, /* 813, dsql_cte_miss_nonrecursive */
{336397234, "WITH clause can't be nested"}, /* 814, dsql_cte_nested_with */
{336397235, "column @1 appears more than once in USING clause"}, /* 815, dsql_col_more_than_once_using */
{336397236, "feature is not supported in dialect @1"}, /* 816, dsql_unsupp_feature_dialect */
{336397237, "CTE \"@1\" is not used in query"}, /* 817, dsql_cte_not_used */
{336397238, "column @1 appears more than once in ALTER VIEW"}, /* 818, dsql_col_more_than_once_view */
{336397239, "@1 is not supported inside IN AUTONOMOUS TRANSACTION block"}, /* 819, dsql_unsupported_in_auto_trans */
{336723983, "unable to open database"}, /* 820, gsec_cant_open_db */
{336723984, "error in switch specifications"}, /* 821, gsec_switches_error */
{336723985, "no operation specified"}, /* 822, gsec_no_op_spec */
{336723986, "no user name specified"}, /* 823, gsec_no_usr_name */
{336723987, "add record error"}, /* 824, gsec_err_add */
{336723988, "modify record error"}, /* 825, gsec_err_modify */
{336723989, "find/modify record error"}, /* 826, gsec_err_find_mod */
{336723990, "record not found for user: @1"}, /* 827, gsec_err_rec_not_found */
{336723991, "delete record error"}, /* 828, gsec_err_delete */
{336723992, "find/delete record error"}, /* 829, gsec_err_find_del */
{336723996, "find/display record error"}, /* 830, gsec_err_find_disp */
{336723997, "invalid parameter, no switch defined"}, /* 831, gsec_inv_param */
{336723998, "operation already specified"}, /* 832, gsec_op_specified */
{336723999, "password already specified"}, /* 833, gsec_pw_specified */
{336724000, "uid already specified"}, /* 834, gsec_uid_specified */
{336724001, "gid already specified"}, /* 835, gsec_gid_specified */
{336724002, "project already specified"}, /* 836, gsec_proj_specified */
{336724003, "organization already specified"}, /* 837, gsec_org_specified */
{336724004, "first name already specified"}, /* 838, gsec_fname_specified */
{336724005, "middle name already specified"}, /* 839, gsec_mname_specified */
{336724006, "last name already specified"}, /* 840, gsec_lname_specified */
{336724008, "invalid switch specified"}, /* 841, gsec_inv_switch */
{336724009, "ambiguous switch specified"}, /* 842, gsec_amb_switch */
{336724010, "no operation specified for parameters"}, /* 843, gsec_no_op_specified */
{336724011, "no parameters allowed for this operation"}, /* 844, gsec_params_not_allowed */
{336724012, "incompatible switches specified"}, /* 845, gsec_incompat_switch */
{336724044, "Invalid user name (maximum 31 bytes allowed)"}, /* 846, gsec_inv_username */
{336724045, "Warning - maximum 8 significant bytes of password used"}, /* 847, gsec_inv_pw_length */
{336724046, "database already specified"}, /* 848, gsec_db_specified */
{336724047, "database administrator name already specified"}, /* 849, gsec_db_admin_specified */
{336724048, "database administrator password already specified"}, /* 850, gsec_db_admin_pw_specified */
{336724049, "SQL role name already specified"}, /* 851, gsec_sql_role_specified */
{336789504, "The license file does not exist or could not be opened for read"}, /* 852, license_no_file */
{336789523, "operation already specified"}, /* 853, license_op_specified */
{336789524, "no operation specified"}, /* 854, license_op_missing */
{336789525, "invalid switch"}, /* 855, license_inv_switch */
{336789526, "invalid switch combination"}, /* 856, license_inv_switch_combo */
{336789527, "illegal operation/switch combination"}, /* 857, license_inv_op_combo */
{336789528, "ambiguous switch"}, /* 858, license_amb_switch */
{336789529, "invalid parameter, no switch specified"}, /* 859, license_inv_parameter */
{336789530, "switch does not take any parameter"}, /* 860, license_param_specified */
{336789531, "switch requires a parameter"}, /* 861, license_param_req */
{336789532, "syntax error in command line"}, /* 862, license_syntx_error */
{336789534, "The certificate was not added. A duplicate ID exists in the license file."}, /* 863, license_dup_id */
{336789535, "The certificate was not added. Invalid certificate ID / Key combination."}, /* 864, license_inv_id_key */
{336789536, "The certificate was not removed. The key does not exist or corresponds to a temporary evaluation license."}, /* 865, license_err_remove */
{336789537, "An error occurred updating the license file. Operation cancelled."}, /* 866, license_err_update */
{336789538, "The certificate could not be validated based on the information given. Please recheck the ID and key information."}, /* 867, license_err_convert */
{336789539, "Operation failed. An unknown error occurred."}, /* 868, license_err_unk */
{336789540, "Add license operation failed, KEY: @1 ID: @2"}, /* 869, license_svc_err_add */
{336789541, "Remove license operation failed, KEY: @1"}, /* 870, license_svc_err_remove */
{336789563, "The evaluation license has already been used on this server. You need to purchase a non-evaluation license."}, /* 871, license_eval_exists */
{336920577, "found unknown switch"}, /* 872, gstat_unknown_switch */
{336920578, "please retry, giving a database name"}, /* 873, gstat_retry */
{336920579, "Wrong ODS version, expected @1, encountered @2"}, /* 874, gstat_wrong_ods */
{336920580, "Unexpected end of database file."}, /* 875, gstat_unexpected_eof */
{336920605, "Can't open database file @1"}, /* 876, gstat_open_err */
{336920606, "Can't read a database page"}, /* 877, gstat_read_err */
{336920607, "System memory exhausted"}, /* 878, gstat_sysmemex */
{336986113, "Wrong value for access mode"}, /* 879, fbsvcmgr_bad_am */
{336986114, "Wrong value for write mode"}, /* 880, fbsvcmgr_bad_wm */
{336986115, "Wrong value for reserve space"}, /* 881, fbsvcmgr_bad_rs */
{336986116, "Unknown tag (@1) in info_svr_db_info block after isc_svc_query()"}, /* 882, fbsvcmgr_info_err */
{336986117, "Unknown tag (@1) in isc_svc_query() results"}, /* 883, fbsvcmgr_query_err */
{336986118, "Unknown switch \"@1\""}, /* 884, fbsvcmgr_switch_unknown */
{337051649, "Switches trusted_svc and trusted_role are not supported from command line"}, /* 885, utl_trusted_switch */
{335544934, "ib_util library has not been loaded to deallocate memory returned by FREE_IT function"}, /* 614, ibutil_not_loaded */
{335740929, "data base file name (@1) already given"}, /* 615, gfix_db_name */
{335740930, "invalid switch @1"}, /* 616, gfix_invalid_sw */
{335740932, "incompatible switch combination"}, /* 617, gfix_incmp_sw */
{335740933, "replay log pathname required"}, /* 618, gfix_replay_req */
{335740934, "number of page buffers for cache required"}, /* 619, gfix_pgbuf_req */
{335740935, "numeric value required"}, /* 620, gfix_val_req */
{335740936, "positive numeric value required"}, /* 621, gfix_pval_req */
{335740937, "number of transactions per sweep required"}, /* 622, gfix_trn_req */
{335740940, "\"full\" or \"reserve\" required"}, /* 623, gfix_full_req */
{335740941, "user name required"}, /* 624, gfix_usrname_req */
{335740942, "password required"}, /* 625, gfix_pass_req */
{335740943, "subsystem name"}, /* 626, gfix_subs_name */
{335740944, "\"wal\" required"}, /* 627, gfix_wal_req */
{335740945, "number of seconds required"}, /* 628, gfix_sec_req */
{335740946, "numeric value between 0 and 32767 inclusive required"}, /* 629, gfix_nval_req */
{335740947, "must specify type of shutdown"}, /* 630, gfix_type_shut */
{335740948, "please retry, specifying an option"}, /* 631, gfix_retry */
{335740951, "please retry, giving a database name"}, /* 632, gfix_retry_db */
{335740991, "internal block exceeds maximum size"}, /* 633, gfix_exceed_max */
{335740992, "corrupt pool"}, /* 634, gfix_corrupt_pool */
{335740993, "virtual memory exhausted"}, /* 635, gfix_mem_exhausted */
{335740994, "bad pool id"}, /* 636, gfix_bad_pool */
{335740995, "Transaction state @1 not in valid range."}, /* 637, gfix_trn_not_valid */
{335741012, "unexpected end of input"}, /* 638, gfix_unexp_eoi */
{335741018, "failed to reconnect to a transaction in database @1"}, /* 639, gfix_recon_fail */
{335741036, "Transaction description item unknown"}, /* 640, gfix_trn_unknown */
{335741038, "\"read_only\" or \"read_write\" required"}, /* 641, gfix_mode_req */
{335741039, " -sql_dialect set database dialect n"}, /* 642, gfix_opt_SQL_dialect */
{335741042, "positive or zero numeric value required"}, /* 643, gfix_pzval_req */
{336003074, "Cannot SELECT RDB$DB_KEY from a stored procedure."}, /* 644, dsql_dbkey_from_non_table */
{336003075, "Precision 10 to 18 changed from DOUBLE PRECISION in SQL dialect 1 to 64-bit scaled integer in SQL dialect 3"}, /* 645, dsql_transitional_numeric */
{336003076, "Use of @1 expression that returns different results in dialect 1 and dialect 3"}, /* 646, dsql_dialect_warning_expr */
{336003077, "Database SQL dialect @1 does not support reference to @2 datatype"}, /* 647, sql_db_dialect_dtype_unsupport */
{336003079, "DB dialect @1 and client dialect @2 conflict with respect to numeric precision @3."}, /* 648, isc_sql_dialect_conflict_num */
{336003080, "WARNING: Numeric literal @1 is interpreted as a floating-point"}, /* 649, dsql_warning_number_ambiguous */
{336003081, "value in SQL dialect 1, but as an exact numeric value in SQL dialect 3."}, /* 650, dsql_warning_number_ambiguous1 */
{336003082, "WARNING: NUMERIC and DECIMAL fields with precision 10 or greater are stored"}, /* 651, dsql_warn_precision_ambiguous */
{336003083, "as approximate floating-point values in SQL dialect 1, but as 64-bit"}, /* 652, dsql_warn_precision_ambiguous1 */
{336003084, "integers in SQL dialect 3."}, /* 653, dsql_warn_precision_ambiguous2 */
{336003085, "Ambiguous field name between @1 and @2"}, /* 654, dsql_ambiguous_field_name */
{336003086, "External function should have return position between 1 and @1"}, /* 655, dsql_udf_return_pos_err */
{336003087, "Label @1 @2 in the current scope"}, /* 656, dsql_invalid_label */
{336003088, "Datatypes @1are not comparable in expression @2"}, /* 657, dsql_datatypes_not_comparable */
{336003089, "Empty cursor name is not allowed"}, /* 658, dsql_cursor_invalid */
{336003090, "Statement already has a cursor @1 assigned"}, /* 659, dsql_cursor_redefined */
{336003091, "Cursor @1 is not found in the current context"}, /* 660, dsql_cursor_not_found */
{336003092, "Cursor @1 already exists in the current context"}, /* 661, dsql_cursor_exists */
{336003093, "Relation @1 is ambiguous in cursor @2"}, /* 662, dsql_cursor_rel_ambiguous */
{336003094, "Relation @1 is not found in cursor @2"}, /* 663, dsql_cursor_rel_not_found */
{336003095, "Cursor is not open"}, /* 664, dsql_cursor_not_open */
{336003096, "Data type @1 is not supported for EXTERNAL TABLES. Relation '@2', field '@3'"}, /* 665, dsql_type_not_supp_ext_tab */
{336003097, "Feature not supported on ODS version older than @1.@2"}, /* 666, dsql_feature_not_supported_ods */
{336003098, "Primary key required on table @1"}, /* 667, primary_key_required */
{336003099, "UPDATE OR INSERT field list does not match primary key of table @1"}, /* 668, upd_ins_doesnt_match_pk */
{336003100, "UPDATE OR INSERT field list does not match MATCHING clause"}, /* 669, upd_ins_doesnt_match_matching */
{336003101, "UPDATE OR INSERT without MATCHING could not be used with views based on more than one table"}, /* 670, upd_ins_with_complex_view */
{336003102, "Incompatible trigger type"}, /* 671, dsql_incompatible_trigger_type */
{336003103, "Database trigger type can't be changed"}, /* 672, dsql_db_trigger_type_cant_change */
{336068740, "Table @1 already exists"}, /* 673, dyn_dup_table */
{336068784, "column @1 does not exist in table/view @2"}, /* 674, dyn_column_does_not_exist */
{336068796, "SQL role @1 does not exist"}, /* 675, dyn_role_does_not_exist */
{336068797, "user @1 has no grant admin option on SQL role @2"}, /* 676, dyn_no_grant_admin_opt */
{336068798, "user @1 is not a member of SQL role @2"}, /* 677, dyn_user_not_role_member */
{336068799, "@1 is not the owner of SQL role @2"}, /* 678, dyn_delete_role_failed */
{336068800, "@1 is a SQL role and not a user"}, /* 679, dyn_grant_role_to_user */
{336068801, "user name @1 could not be used for SQL role"}, /* 680, dyn_inv_sql_role_name */
{336068802, "SQL role @1 already exists"}, /* 681, dyn_dup_sql_role */
{336068803, "keyword @1 can not be used as a SQL role name"}, /* 682, dyn_kywd_spec_for_role */
{336068804, "SQL roles are not supported in on older versions of the database. A backup and restore of the database is required."}, /* 683, dyn_roles_not_supported */
{336068812, "Cannot rename domain @1 to @2. A domain with that name already exists."}, /* 684, dyn_domain_name_exists */
{336068813, "Cannot rename column @1 to @2. A column with that name already exists in table @3."}, /* 685, dyn_field_name_exists */
{336068814, "Column @1 from table @2 is referenced in @3"}, /* 686, dyn_dependency_exists */
{336068815, "Cannot change datatype for column @1. Changing datatype is not supported for BLOB or ARRAY columns."}, /* 687, dyn_dtype_invalid */
{336068816, "New size specified for column @1 must be at least @2 characters."}, /* 688, dyn_char_fld_too_small */
{336068817, "Cannot change datatype for @1. Conversion from base type @2 to @3 is not supported."}, /* 689, dyn_invalid_dtype_conversion */
{336068818, "Cannot change datatype for column @1 from a character type to a non-character type."}, /* 690, dyn_dtype_conv_invalid */
{336068820, "Zero length identifiers are not allowed"}, /* 691, dyn_zero_len_id */
{336068829, "Maximum number of collations per character set exceeded"}, /* 692, max_coll_per_charset */
{336068830, "Invalid collation attributes"}, /* 693, invalid_coll_attr */
{336068840, "@1 cannot reference @2"}, /* 694, dyn_wrong_gtt_scope */
{336068852, "New scale specified for column @1 must be at most @2."}, /* 695, dyn_scale_too_big */
{336068853, "New precision specified for column @1 must be at least @2."}, /* 696, dyn_precision_too_small */
{336068855, "Warning: @1 on @2 is not granted to @3."}, /* 697, dyn_miss_priv_warning */
{336068856, "Feature '@1' is not supported in ODS @2.@3"}, /* 698, dyn_ods_not_supp_feature */
{336068857, "Cannot add or remove COMPUTED from column @1"}, /* 699, dyn_cannot_addrem_computed */
{336068858, "Password should not be empty string"}, /* 700, dyn_no_empty_pw */
{336068859, "Index @1 already exists"}, /* 701, dyn_dup_index */
{336330753, "found unknown switch"}, /* 702, gbak_unknown_switch */
{336330754, "page size parameter missing"}, /* 703, gbak_page_size_missing */
{336330755, "Page size specified (@1) greater than limit (16384 bytes)"}, /* 704, gbak_page_size_toobig */
{336330756, "redirect location for output is not specified"}, /* 705, gbak_redir_ouput_missing */
{336330757, "conflicting switches for backup/restore"}, /* 706, gbak_switches_conflict */
{336330758, "device type @1 not known"}, /* 707, gbak_unknown_device */
{336330759, "protection is not there yet"}, /* 708, gbak_no_protection */
{336330760, "page size is allowed only on restore or create"}, /* 709, gbak_page_size_not_allowed */
{336330761, "multiple sources or destinations specified"}, /* 710, gbak_multi_source_dest */
{336330762, "requires both input and output filenames"}, /* 711, gbak_filename_missing */
{336330763, "input and output have the same name. Disallowed."}, /* 712, gbak_dup_inout_names */
{336330764, "expected page size, encountered \"@1\""}, /* 713, gbak_inv_page_size */
{336330765, "REPLACE specified, but the first file @1 is a database"}, /* 714, gbak_db_specified */
{336330766, "database @1 already exists. To replace it, use the -REP switch"}, /* 715, gbak_db_exists */
{336330767, "device type not specified"}, /* 716, gbak_unk_device */
{336330772, "gds_$blob_info failed"}, /* 717, gbak_blob_info_failed */
{336330773, "do not understand BLOB INFO item @1"}, /* 718, gbak_unk_blob_item */
{336330774, "gds_$get_segment failed"}, /* 719, gbak_get_seg_failed */
{336330775, "gds_$close_blob failed"}, /* 720, gbak_close_blob_failed */
{336330776, "gds_$open_blob failed"}, /* 721, gbak_open_blob_failed */
{336330777, "Failed in put_blr_gen_id"}, /* 722, gbak_put_blr_gen_id_failed */
{336330778, "data type @1 not understood"}, /* 723, gbak_unk_type */
{336330779, "gds_$compile_request failed"}, /* 724, gbak_comp_req_failed */
{336330780, "gds_$start_request failed"}, /* 725, gbak_start_req_failed */
{336330781, "gds_$receive failed"}, /* 726, gbak_rec_failed */
{336330782, "gds_$release_request failed"}, /* 727, gbak_rel_req_failed */
{336330783, "gds_$database_info failed"}, /* 728, gbak_db_info_failed */
{336330784, "Expected database description record"}, /* 729, gbak_no_db_desc */
{336330785, "failed to create database @1"}, /* 730, gbak_db_create_failed */
{336330786, "RESTORE: decompression length error"}, /* 731, gbak_decomp_len_error */
{336330787, "cannot find table @1"}, /* 732, gbak_tbl_missing */
{336330788, "Cannot find column for BLOB"}, /* 733, gbak_blob_col_missing */
{336330789, "gds_$create_blob failed"}, /* 734, gbak_create_blob_failed */
{336330790, "gds_$put_segment failed"}, /* 735, gbak_put_seg_failed */
{336330791, "expected record length"}, /* 736, gbak_rec_len_exp */
{336330792, "wrong length record, expected @1 encountered @2"}, /* 737, gbak_inv_rec_len */
{336330793, "expected data attribute"}, /* 738, gbak_exp_data_type */
{336330794, "Failed in store_blr_gen_id"}, /* 739, gbak_gen_id_failed */
{336330795, "do not recognize record type @1"}, /* 740, gbak_unk_rec_type */
{336330796, "Expected backup version 1..8. Found @1"}, /* 741, gbak_inv_bkup_ver */
{336330797, "expected backup description record"}, /* 742, gbak_missing_bkup_desc */
{336330798, "string truncated"}, /* 743, gbak_string_trunc */
{336330799, "warning -- record could not be restored"}, /* 744, gbak_cant_rest_record */
{336330800, "gds_$send failed"}, /* 745, gbak_send_failed */
{336330801, "no table name for data"}, /* 746, gbak_no_tbl_name */
{336330802, "unexpected end of file on backup file"}, /* 747, gbak_unexp_eof */
{336330803, "database format @1 is too old to restore to"}, /* 748, gbak_db_format_too_old */
{336330804, "array dimension for column @1 is invalid"}, /* 749, gbak_inv_array_dim */
{336330807, "Expected XDR record length"}, /* 750, gbak_xdr_len_expected */
{336330817, "cannot open backup file @1"}, /* 751, gbak_open_bkup_error */
{336330818, "cannot open status and error output file @1"}, /* 752, gbak_open_error */
{336330934, "blocking factor parameter missing"}, /* 753, gbak_missing_block_fac */
{336330935, "expected blocking factor, encountered \"@1\""}, /* 754, gbak_inv_block_fac */
{336330936, "a blocking factor may not be used in conjunction with device CT"}, /* 755, gbak_block_fac_specified */
{336330940, "user name parameter missing"}, /* 756, gbak_missing_username */
{336330941, "password parameter missing"}, /* 757, gbak_missing_password */
{336330952, " missing parameter for the number of bytes to be skipped"}, /* 758, gbak_missing_skipped_bytes */
{336330953, "expected number of bytes to be skipped, encountered \"@1\""}, /* 759, gbak_inv_skipped_bytes */
{336330965, "character set"}, /* 760, gbak_err_restore_charset */
{336330967, "collation"}, /* 761, gbak_err_restore_collation */
{336330972, "Unexpected I/O error while reading from backup file"}, /* 762, gbak_read_error */
{336330973, "Unexpected I/O error while writing to backup file"}, /* 763, gbak_write_error */
{336330985, "could not drop database @1 (database might be in use)"}, /* 764, gbak_db_in_use */
{336330990, "System memory exhausted"}, /* 765, gbak_sysmemex */
{336331002, "SQL role"}, /* 766, gbak_restore_role_failed */
{336331005, "SQL role parameter missing"}, /* 767, gbak_role_op_missing */
{336331010, "page buffers parameter missing"}, /* 768, gbak_page_buffers_missing */
{336331011, "expected page buffers, encountered \"@1\""}, /* 769, gbak_page_buffers_wrong_param */
{336331012, "page buffers is allowed only on restore or create"}, /* 770, gbak_page_buffers_restore */
{336331014, "size specification either missing or incorrect for file @1"}, /* 771, gbak_inv_size */
{336331015, "file @1 out of sequence"}, /* 772, gbak_file_outof_sequence */
{336331016, "can't join -- one of the files missing"}, /* 773, gbak_join_file_missing */
{336331017, " standard input is not supported when using join operation"}, /* 774, gbak_stdin_not_supptd */
{336331018, "standard output is not supported when using split operation"}, /* 775, gbak_stdout_not_supptd */
{336331019, "backup file @1 might be corrupt"}, /* 776, gbak_bkup_corrupt */
{336331020, "database file specification missing"}, /* 777, gbak_unk_db_file_spec */
{336331021, "can't write a header record to file @1"}, /* 778, gbak_hdr_write_failed */
{336331022, "free disk space exhausted"}, /* 779, gbak_disk_space_ex */
{336331023, "file size given (@1) is less than minimum allowed (@2)"}, /* 780, gbak_size_lt_min */
{336331025, "service name parameter missing"}, /* 781, gbak_svc_name_missing */
{336331026, "Cannot restore over current database, must be SYSDBA or owner of the existing database."}, /* 782, gbak_not_ownr */
{336331031, "\"read_only\" or \"read_write\" required"}, /* 783, gbak_mode_req */
{336331033, "just data ignore all constraints etc."}, /* 784, gbak_just_data */
{336331034, "restoring data only ignoring foreign key, unique, not null & other constraints"}, /* 785, gbak_data_only */
{336397205, "ODS versions before ODS@1 are not supported"}, /* 786, dsql_too_old_ods */
{336397206, "Table @1 does not exist"}, /* 787, dsql_table_not_found */
{336397207, "View @1 does not exist"}, /* 788, dsql_view_not_found */
{336397208, "At line @1, column @2"}, /* 789, dsql_line_col_error */
{336397209, "At unknown line and column"}, /* 790, dsql_unknown_pos */
{336397210, "Column @1 cannot be repeated in @2 statement"}, /* 791, dsql_no_dup_name */
{336397211, "Too many values (more than @1) in member list to match against"}, /* 792, dsql_too_many_values */
{336397212, "Array and BLOB data types not allowed in computed field"}, /* 793, dsql_no_array_computed */
{336397213, "Implicit domain name @1 not allowed in user created domain"}, /* 794, dsql_implicit_domain_name */
{336397214, "scalar operator used on field @1 which is not an array"}, /* 795, dsql_only_can_subscript_array */
{336397215, "cannot sort on more than 255 items"}, /* 796, dsql_max_sort_items */
{336397216, "cannot group on more than 255 items"}, /* 797, dsql_max_group_items */
{336397217, "Cannot include the same field (@1.@2) twice in the ORDER BY clause with conflicting sorting options"}, /* 798, dsql_conflicting_sort_field */
{336397218, "column list from derived table @1 has more columns than the number of items in its SELECT statement"}, /* 799, dsql_derived_table_more_columns */
{336397219, "column list from derived table @1 has less columns than the number of items in its SELECT statement"}, /* 800, dsql_derived_table_less_columns */
{336397220, "no column name specified for column number @1 in derived table @2"}, /* 801, dsql_derived_field_unnamed */
{336397221, "column @1 was specified multiple times for derived table @2"}, /* 802, dsql_derived_field_dup_name */
{336397222, "Internal dsql error: alias type expected by pass1_expand_select_node"}, /* 803, dsql_derived_alias_select */
{336397223, "Internal dsql error: alias type expected by pass1_field"}, /* 804, dsql_derived_alias_field */
{336397224, "Internal dsql error: column position out of range in pass1_union_auto_cast"}, /* 805, dsql_auto_field_bad_pos */
{336397225, "Recursive CTE member (@1) can refer itself only in FROM clause"}, /* 806, dsql_cte_wrong_reference */
{336397226, "CTE '@1' has cyclic dependencies"}, /* 807, dsql_cte_cycle */
{336397227, "Recursive member of CTE can't be member of an outer join"}, /* 808, dsql_cte_outer_join */
{336397228, "Recursive member of CTE can't reference itself more than once"}, /* 809, dsql_cte_mult_references */
{336397229, "Recursive CTE (@1) must be an UNION"}, /* 810, dsql_cte_not_a_union */
{336397230, "CTE '@1' defined non-recursive member after recursive"}, /* 811, dsql_cte_nonrecurs_after_recurs */
{336397231, "Recursive member of CTE '@1' has @2 clause"}, /* 812, dsql_cte_wrong_clause */
{336397232, "Recursive members of CTE (@1) must be linked with another members via UNION ALL"}, /* 813, dsql_cte_union_all */
{336397233, "Non-recursive member is missing in CTE '@1'"}, /* 814, dsql_cte_miss_nonrecursive */
{336397234, "WITH clause can't be nested"}, /* 815, dsql_cte_nested_with */
{336397235, "column @1 appears more than once in USING clause"}, /* 816, dsql_col_more_than_once_using */
{336397236, "feature is not supported in dialect @1"}, /* 817, dsql_unsupp_feature_dialect */
{336397237, "CTE \"@1\" is not used in query"}, /* 818, dsql_cte_not_used */
{336397238, "column @1 appears more than once in ALTER VIEW"}, /* 819, dsql_col_more_than_once_view */
{336397239, "@1 is not supported inside IN AUTONOMOUS TRANSACTION block"}, /* 820, dsql_unsupported_in_auto_trans */
{336723983, "unable to open database"}, /* 821, gsec_cant_open_db */
{336723984, "error in switch specifications"}, /* 822, gsec_switches_error */
{336723985, "no operation specified"}, /* 823, gsec_no_op_spec */
{336723986, "no user name specified"}, /* 824, gsec_no_usr_name */
{336723987, "add record error"}, /* 825, gsec_err_add */
{336723988, "modify record error"}, /* 826, gsec_err_modify */
{336723989, "find/modify record error"}, /* 827, gsec_err_find_mod */
{336723990, "record not found for user: @1"}, /* 828, gsec_err_rec_not_found */
{336723991, "delete record error"}, /* 829, gsec_err_delete */
{336723992, "find/delete record error"}, /* 830, gsec_err_find_del */
{336723996, "find/display record error"}, /* 831, gsec_err_find_disp */
{336723997, "invalid parameter, no switch defined"}, /* 832, gsec_inv_param */
{336723998, "operation already specified"}, /* 833, gsec_op_specified */
{336723999, "password already specified"}, /* 834, gsec_pw_specified */
{336724000, "uid already specified"}, /* 835, gsec_uid_specified */
{336724001, "gid already specified"}, /* 836, gsec_gid_specified */
{336724002, "project already specified"}, /* 837, gsec_proj_specified */
{336724003, "organization already specified"}, /* 838, gsec_org_specified */
{336724004, "first name already specified"}, /* 839, gsec_fname_specified */
{336724005, "middle name already specified"}, /* 840, gsec_mname_specified */
{336724006, "last name already specified"}, /* 841, gsec_lname_specified */
{336724008, "invalid switch specified"}, /* 842, gsec_inv_switch */
{336724009, "ambiguous switch specified"}, /* 843, gsec_amb_switch */
{336724010, "no operation specified for parameters"}, /* 844, gsec_no_op_specified */
{336724011, "no parameters allowed for this operation"}, /* 845, gsec_params_not_allowed */
{336724012, "incompatible switches specified"}, /* 846, gsec_incompat_switch */
{336724044, "Invalid user name (maximum 31 bytes allowed)"}, /* 847, gsec_inv_username */
{336724045, "Warning - maximum 8 significant bytes of password used"}, /* 848, gsec_inv_pw_length */
{336724046, "database already specified"}, /* 849, gsec_db_specified */
{336724047, "database administrator name already specified"}, /* 850, gsec_db_admin_specified */
{336724048, "database administrator password already specified"}, /* 851, gsec_db_admin_pw_specified */
{336724049, "SQL role name already specified"}, /* 852, gsec_sql_role_specified */
{336789504, "The license file does not exist or could not be opened for read"}, /* 853, license_no_file */
{336789523, "operation already specified"}, /* 854, license_op_specified */
{336789524, "no operation specified"}, /* 855, license_op_missing */
{336789525, "invalid switch"}, /* 856, license_inv_switch */
{336789526, "invalid switch combination"}, /* 857, license_inv_switch_combo */
{336789527, "illegal operation/switch combination"}, /* 858, license_inv_op_combo */
{336789528, "ambiguous switch"}, /* 859, license_amb_switch */
{336789529, "invalid parameter, no switch specified"}, /* 860, license_inv_parameter */
{336789530, "switch does not take any parameter"}, /* 861, license_param_specified */
{336789531, "switch requires a parameter"}, /* 862, license_param_req */
{336789532, "syntax error in command line"}, /* 863, license_syntx_error */
{336789534, "The certificate was not added. A duplicate ID exists in the license file."}, /* 864, license_dup_id */
{336789535, "The certificate was not added. Invalid certificate ID / Key combination."}, /* 865, license_inv_id_key */
{336789536, "The certificate was not removed. The key does not exist or corresponds to a temporary evaluation license."}, /* 866, license_err_remove */
{336789537, "An error occurred updating the license file. Operation cancelled."}, /* 867, license_err_update */
{336789538, "The certificate could not be validated based on the information given. Please recheck the ID and key information."}, /* 868, license_err_convert */
{336789539, "Operation failed. An unknown error occurred."}, /* 869, license_err_unk */
{336789540, "Add license operation failed, KEY: @1 ID: @2"}, /* 870, license_svc_err_add */
{336789541, "Remove license operation failed, KEY: @1"}, /* 871, license_svc_err_remove */
{336789563, "The evaluation license has already been used on this server. You need to purchase a non-evaluation license."}, /* 872, license_eval_exists */
{336920577, "found unknown switch"}, /* 873, gstat_unknown_switch */
{336920578, "please retry, giving a database name"}, /* 874, gstat_retry */
{336920579, "Wrong ODS version, expected @1, encountered @2"}, /* 875, gstat_wrong_ods */
{336920580, "Unexpected end of database file."}, /* 876, gstat_unexpected_eof */
{336920605, "Can't open database file @1"}, /* 877, gstat_open_err */
{336920606, "Can't read a database page"}, /* 878, gstat_read_err */
{336920607, "System memory exhausted"}, /* 879, gstat_sysmemex */
{336986113, "Wrong value for access mode"}, /* 880, fbsvcmgr_bad_am */
{336986114, "Wrong value for write mode"}, /* 881, fbsvcmgr_bad_wm */
{336986115, "Wrong value for reserve space"}, /* 882, fbsvcmgr_bad_rs */
{336986116, "Unknown tag (@1) in info_svr_db_info block after isc_svc_query()"}, /* 883, fbsvcmgr_info_err */
{336986117, "Unknown tag (@1) in isc_svc_query() results"}, /* 884, fbsvcmgr_query_err */
{336986118, "Unknown switch \"@1\""}, /* 885, fbsvcmgr_switch_unknown */
{337051649, "Switches trusted_svc and trusted_role are not supported from command line"}, /* 886, utl_trusted_switch */
{0, NULL}
};

View File

@ -634,6 +634,7 @@ static const struct {
{335544931, 0}, /* 611 montabexh */
{335544932, -172}, /* 612 modnotfound */
{335544933, -901}, /* 613 nothing_to_cancel */
{335544934, -901}, /* 614 ibutil_not_loaded */
{335740929, -901}, /* 1 gfix_db_name */
{335740930, -901}, /* 2 gfix_invalid_sw */
{335740932, -901}, /* 4 gfix_incmp_sw */

View File

@ -634,6 +634,7 @@ static const struct {
{335544931, "HY001"}, // 611 montabexh
{335544932, "39000"}, // 612 modnotfound
{335544933, "HY018"}, // 613 nothing_to_cancel
{335544934, "39000"}, // 614 ibutil_not_loaded
{335740929, "00000"}, // 1 gfix_db_name
{335740930, "00000"}, // 2 gfix_invalid_sw
{335740932, "00000"}, // 4 gfix_incmp_sw

View File

@ -61,14 +61,120 @@
#include "../jrd/isc_s_proto.h"
#include "../jrd/blb.h"
#include "../common/classes/auto.h"
#include "../common/utils_proto.h"
#ifndef WIN_NT
#include <dlfcn.h> // dladdr
#endif
using namespace Jrd;
using namespace Firebird;
typedef void* UDF_ARG;
// Defined in extlib/ib_util.cpp
extern "C" int ib_util_free(void* ptr);
#ifndef BOOT_BUILD
// ASF: This code should better be moved to make Config::getInstallDirectory() work in posix.
// I leave it for another day because there is different config code for darwin and other posix
// systems, but darwin is posix and there is no need to have two different implementation files for
// them.
namespace
{
GlobalPtr<PathName> libUtilPath;
struct IbUtilStartup
{
IbUtilStartup()
{
#ifdef WIN_NT
libUtilPath->assign("ib_util");
#else
Dl_info info;
if (dladdr((void*) IbUtil::initialize, &info) != 0)
{
PathName temp1, temp2, temp3;
if (PathUtils::isRelative(info.dli_fname))
{
fb_utils::getCwd(temp2);
PathUtils::concatPath(temp1, temp2, info.dli_fname);
}
else
temp1 = info.dli_fname;
PathUtils::splitLastComponent(temp3, temp2, temp1);
PathUtils::concatPath(libUtilPath, temp3, "../lib/libib_util");
}
else
libUtilPath->assign("libib_util");
#endif
ModuleLoader::doctorModuleExtention(libUtilPath);
}
} ibUtilStartup;
}
#endif
void IbUtil::initialize()
{
#ifndef BOOT_BUILD
#ifdef WIN_NT
Firebird::PathName path = "ib_util";
#else
Firebird::PathName path = "libib_util";
#endif
ModuleLoader::Module* module = ModuleLoader::loadModule(libUtilPath);
if (module)
{
void (*ibUtilUnit)(void* (*)(long));
if (module->findSymbol("ib_util_init", ibUtilUnit))
ibUtilUnit(alloc);
else
gds__log("ib_util_init not found in %s", libUtilPath->c_str());
}
else
gds__log("%s library has not been found", libUtilPath->c_str());
#endif // !BOOT_BUILD
}
void* IbUtil::alloc(long size)
{
thread_db* tdbb = JRD_get_thread_data();
void* const ptr = tdbb->getDefaultPool()->allocate(size);
if (ptr)
tdbb->getAttachment()->att_udf_pointers.add(ptr);
return ptr;
}
bool IbUtil::free(void* ptr)
{
if (!ptr)
return true;
thread_db* tdbb = JRD_get_thread_data();
Attachment* attachment = tdbb->getAttachment();
bool found = false;
size_t pos;
if (attachment->att_udf_pointers.find(ptr, pos))
{
attachment->att_udf_pointers.remove(pos);
found = true;
}
if (found)
tdbb->getDefaultPool()->deallocate(ptr);
return found;
}
typedef void* UDF_ARG;
template <typename T>
T CALL_UDF(Database* dbb, int (*entrypoint)(), UDF_ARG* args)
@ -532,7 +638,7 @@ void FUN_evaluate(thread_db* tdbb, UserFunction* function, jrd_nod* node, impure
bool result_was_null = false;
// Did the udf mismanage memory marked with FREE_IT,
//that should be deallocated by the engine?
// that should be deallocated by the engine?
bool freeItOk = true;
invoke(tdbb, function, return_ptr, value, args, return_blob_struct,
@ -923,7 +1029,7 @@ namespace {
static void clear(void* p)
{
if (p)
ib_util_free(p);
IbUtil::free(p);
}
};
} // namespace
@ -1127,11 +1233,12 @@ static void invoke(thread_db* tdbb,
{
//sentryData = 0;
if (temp_ptr)
freeItOk = ib_util_free(temp_ptr) && freeItOk;
freeItOk = IbUtil::free(temp_ptr) && freeItOk;
// CVC: Let's free the descriptor, too.
//sentryDsc = 0;
if (return_dsc)
freeItOk = ib_util_free(return_dsc) && freeItOk;
freeItOk = IbUtil::free(return_dsc) && freeItOk;
}
}
else

View File

@ -26,6 +26,17 @@
class Jrd::CompilerScratch;
class IbUtil
{
public:
static void initialize();
static void* alloc(long size);
static bool free(void* ptr);
};
void FUN_evaluate(Jrd::thread_db*, Jrd::UserFunction*, Jrd::jrd_nod*, Jrd::impure_value*);
Jrd::UserFunction* FUN_lookup_function(Jrd::thread_db*, const Firebird::MetaName&, bool ShowAccessError);
Jrd::UserFunction* FUN_resolve(Jrd::thread_db*, Jrd::CompilerScratch*, Jrd::UserFunction*, Jrd::jrd_nod*);

View File

@ -29,6 +29,7 @@
#include "../jrd/license.h"
#include "../jrd/tra.h"
#include "../jrd/dsc_proto.h"
#include "../jrd/fun_proto.h"
#include "../jrd/pag_proto.h"
#include "../jrd/thread_proto.h"
@ -140,7 +141,7 @@ FPTR_INT FUNCTIONS_entrypoint(const char* module, const char* entrypoint)
}
static vary* make_result_str(const char* str, size_t str_len) {
vary *result_vary = (vary*) malloc(str_len + 2);
vary *result_vary = (vary*) IbUtil::alloc(str_len + 2);
result_vary->vary_length = str_len;
memcpy(result_vary->vary_string, str, result_vary->vary_length);
return result_vary;
@ -415,7 +416,7 @@ static SLONG* byteLen(const dsc* v)
if (!v || !v->dsc_address || (v->dsc_flags & DSC_null))
return 0;
SLONG& rc = *(SLONG*) malloc(sizeof(SLONG));
SLONG& rc = *(SLONG*) IbUtil::alloc(sizeof(SLONG));
switch (v->dsc_dtype)
{
case dtype_text:

View File

@ -157,6 +157,7 @@ namespace
public:
static void init()
{
IbUtil::initialize();
IntlManager::initialize();
PluginManager::load_engine_plugins();
}
@ -5002,7 +5003,8 @@ Attachment::Attachment(MemoryPool* pool, Database* dbb)
att_network_protocol(*pool),
att_remote_address(*pool),
att_remote_process(*pool),
att_dsql_cache(*pool)
att_dsql_cache(*pool),
att_udf_pointers(*pool)
{
att_mutex.enter();
}

View File

@ -320,6 +320,7 @@ public:
#endif
Firebird::GenericMap<Firebird::Pair<Firebird::Left<
Firebird::string, DSqlCacheItem> > > att_dsql_cache; // DSQL cache locks
Firebird::SortedArray<void*> att_udf_pointers;
dsql_dbb* att_dsql_instance;
Firebird::Mutex att_mutex; // attachment mutex

View File

@ -1,7 +1,7 @@
/* MAX_NUMBER is the next number to be used, always one more than the highest message number. */
set bulk_insert INSERT INTO FACILITIES (LAST_CHANGE, FACILITY, FAC_CODE, MAX_NUMBER) VALUES (?, ?, ?, ?);
--
('2008-07-08 03:09:00', 'JRD', 0, 614)
('2008-07-08 22:12:00', 'JRD', 0, 615)
('2005-09-02 00:55:59', 'QLI', 1, 513)
('1996-11-07 13:38:37', 'GDEF', 2, 345)
('2007-04-07 13:11:00', 'GFIX', 3, 116)

View File

@ -713,6 +713,7 @@ COMMIT WORK;
('montabexh', 'acquire', 'DatabaseSnapshot.cpp', NULL, 0, 611, NULL, 'Monitoring table space exhausted', NULL, NULL)
('modnotfound', 'par_function', 'par.cpp', NULL, 0, 612, NULL, 'module name or entrypoint could not be found', NULL, NULL)
('nothing_to_cancel', 'FB_CANCEL_OPERATION', 'why.cpp', NULL, 0, 613, NULL, 'nothing to cancel', NULL, NULL)
('ibutil_not_loaded', NULL, NULL, NULL, 0, 614, NULL, 'ib_util library has not been loaded to deallocate memory returned by FREE_IT function', NULL, NULL)
-- QLI
(NULL, NULL, NULL, NULL, 1, 0, NULL, 'expected type', NULL, NULL);
(NULL, NULL, NULL, NULL, 1, 1, NULL, 'bad block type', NULL, NULL);

View File

@ -614,6 +614,7 @@ set bulk_insert INSERT INTO SYSTEM_ERRORS (SQL_CODE, SQL_CLASS, SQL_SUBCLASS, FA
(-000, 'HY', '001', 0, 611, 'montabexh', NULL, NULL)
(-172, '39', '000', 0, 612, 'modnotfound', NULL, NULL)
(-901, 'HY', '018', 0, 613, 'nothing_to_cancel', NULL, NULL)
(-901, '39', '000', 0, 614, 'ibutil_not_loaded', NULL, NULL)
-- GFIX
(-901, '00', '000', 3, 1, 'gfix_db_name', NULL, NULL)
(-901, '00', '000', 3, 2, 'gfix_invalid_sw', NULL, NULL)