.\" Automatically generated by Pod::Man 4.14 (Pod::Simple 3.42) .\" .\" Standard preamble: .\" ======================================================================== .de Sp \" Vertical space (when we can't use .PP) .if t .sp .5v .if n .sp .. .de Vb \" Begin verbatim text .ft CW .nf .ne \\$1 .. .de Ve \" End verbatim text .ft R .fi .. .\" Set up some character translations and predefined strings. \*(-- will .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left .\" double quote, and \*(R" will give a right double quote. \*(C+ will .\" give a nicer C++. Capital omega is used to do unbreakable dashes and .\" therefore won't be available. \*(C` and \*(C' expand to `' in nroff, .\" nothing in troff, for use with C<>. .tr \(*W- .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' .ie n \{\ . ds -- \(*W- . ds PI pi . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch . ds L" "" . ds R" "" . ds C` "" . ds C' "" 'br\} .el\{\ . ds -- \|\(em\| . ds PI \(*p . ds L" `` . ds R" '' . ds C` . ds C' 'br\} .\" .\" Escape single quotes in literal strings from groff's Unicode transform. .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" .\" If the F register is >0, we'll generate index entries on stderr for .\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index .\" entries marked with X<> in POD. Of course, you'll have to process the .\" output yourself in some meaningful fashion. .\" .\" Avoid warning from groff about undefined register 'F'. .de IX .. .nr rF 0 .if \n(.g .if rF .nr rF 1 .if (\n(rF:(\n(.g==0)) \{\ . if \nF \{\ . de IX . tm Index:\\$1\t\\n%\t"\\$2" .. . if !\nF==2 \{\ . nr % 0 . nr F 2 . \} . \} .\} .rr rF .\" .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). .\" Fear. Run. Save yourself. No user-serviceable parts. . \" fudge factors for nroff and troff .if n \{\ . ds #H 0 . ds #V .8m . ds #F .3m . ds #[ \f1 . ds #] \fP .\} .if t \{\ . ds #H ((1u-(\\\\n(.fu%2u))*.13m) . ds #V .6m . ds #F 0 . ds #[ \& . ds #] \& .\} . \" simple accents for nroff and troff .if n \{\ . ds ' \& . ds ` \& . ds ^ \& . ds , \& . ds ~ ~ . ds / .\} .if t \{\ . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' .\} . \" troff and (daisy-wheel) nroff accents .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' .ds 8 \h'\*(#H'\(*b\h'-\*(#H' .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] .ds ae a\h'-(\w'a'u*4/10)'e .ds Ae A\h'-(\w'A'u*4/10)'E . \" corrections for vroff .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' . \" for low resolution devices (crt and lpr) .if \n(.H>23 .if \n(.V>19 \ \{\ . ds : e . ds 8 ss . ds o a . ds d- d\h'-1'\(ga . ds D- D\h'-1'\(hy . ds th \o'bp' . ds Th \o'LP' . ds ae ae . ds Ae AE .\} .rm #[ #] #H #V #F C .\" ======================================================================== .\" .IX Title "Alzabo::MySQL 3pm" .TH Alzabo::MySQL 3pm "2022-06-14" "perl v5.34.0" "User Contributed Perl Documentation" .\" For nroff, turn off justification. Always turn off hyphenation; it makes .\" way too many mistakes in technical documents. .if n .ad l .nh .SH "NAME" Alzabo::MySQL \- Alzabo and MySQL .SH "DESCRIPTION" .IX Header "DESCRIPTION" This documentation is about what special support Alzabo has for MySQL, as well as what is lacking. .PP MySQL support is based on the 3.23.* release series, with some support for features that are starting to appear in the 4.0.* releases. Earlier versions of MySQL will probably work with Alzabo, though Alzabo cannot magically make these releases support new features like fulltext indexes. .SS "Indexes" .IX Subsection "Indexes" .IP "\(bu" 4 Alzabo supports the ability to specify prefixes when adding an index. Prefixes are required when attempting to index any sort of text or blob column. .IP "\(bu" 4 Alzabo supports the creation of fulltext indexes and their use in \&\s-1SELECT\s0 and \s-1WHERE\s0 clauses. This includes the ability to get back the score given for a match as part of a select, using the \f(CW\*(C`function\*(C'\fR or \&\f(CW\*(C`select\*(C'\fR methods of either table or schema objects. .SS "Reverse Engineering" .IX Subsection "Reverse Engineering" .IP "\(bu" 4 When reverse engineering a schema, Alzabo knows that MySQL has \&\*(L"default defaults\*(R" for certain column types. For example, if a \s-1DATE\s0 column is specified as \s-1NOT NULL\s0 but is not assigned a default, MySQL gives this column a default of '0000\-00\-00'. .Sp Because Alzabo knows about this, it will ignore these defaults when reverse engineering an \s-1RDBMS.\s0 .IP "\(bu" 4 Similarly, Alzabo knows that MySQL assigns default \*(L"lengths\*(R" to many column types. For example, if given \s-1INTEGER\s0 as a column type, MySQL will convert this to \s-1INTEGER\s0(11) or \s-1INTEGER\s0(10), depending on the version of MySQL being used. .Sp Again, Alzabo ignores these lengths when reverse engineering a schema. .IP "\(bu" 4 All of this may lead to apparent inconsistencies when using the with the \f(CW\*(C`Alzabo::Create::Schema\->sync_backend\*(C'\fR or \f(CW\*(C`Alzabo::Create::Schema\->sync_backend_sql\*(C'\fR methods. If you are using this feature from the web based schema creator, you will see that even immediately after running the \f(CW\*(C`sync_backend()\*(C'\fR method, Alzabo may still think there are differences between the two schemas. This is not a problem, as running the \s-1SQL\s0 Alzabo generates will not actually change your database. .SS "Transactions" .IX Subsection "Transactions" .RS 4 Alzabo will try to use transactions whenever appropriate. Unfortunately, there is no way to determine whether or not a given table supports transactions so Alzabo simply calls \s-1DBI\s0's \&\f(CW\*(C`begin_work()\*(C'\fR method, whether or not this will actually do anything. .RE .SS "Constraints and Foreign Keys" .IX Subsection "Constraints and Foreign Keys" .IP "\(bu" 4 Column constraints are treated as column attributes. .IP "\(bu" 4 Foreign key constraints are not generated when generating \s-1SQL\s0 for a MySQL schema. This will probably change in the future. .SS "Table Types" .IX Subsection "Table Types" .RS 4 These can be specified as a table attribute. .RE