.\" 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::FAQ 3pm" .TH Alzabo::FAQ 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::FAQ \- Frequently Asked Questions .SS "How can I generate the \s-1SQL\s0 to turn one schema into another?" .IX Subsection "How can I generate the SQL to turn one schema into another?" Assuming you have schema objects representing these already created (through reverse engineering for example) \fBand\fR both schemas are for the same \s-1RDBMS,\s0 you can simply do this: .PP .Vb 1 \& my @sql = $schema1\->rules\->schema_diff( old => $schema1, new => $schema2 ); .Ve .PP The \f(CW@sql\fR array will contain all the \s-1SQL\s0 statements necessary to transform the schema in \f(CW$schema1\fR into the schema in \f(CW$schema2\fR. .PP If you want to sync a schema object to the current state of the \s-1RDBMS\s0 backend's schema, check out the \f(CW\*(C`Alzabo::Create::Schema\->sync_backend\*(C'\fR method. .SS "How can I make a local copy of the documentation as \s-1HTML\s0?" .IX Subsection "How can I make a local copy of the documentation as HTML?" Alzabo comes with a script called \f(CW\*(C`make_html_docs.pl\*(C'\fR. It takes three arguments. The first is the source file directory root. The second is the target directory. The last is the absolute \s-1URL\s0 path that this target directory represents. If you have perl 5.6.0 or greated installed, it is recommended that you use it to run this script as the Pod::Html module included with more recent Perls does a much better job of making \s-1HTML.\s0 .PP If you were in the root of the source directory you might run this as: .PP .Vb 1 \& perl ./make_html_docs.pl ./lib /usr/local/apache/htdocs/Alzabo_docs /Alzabo_docs .Ve .PP The script will create an index.html file as well as turning the documentation into \s-1HTML.\s0 .SS "How can I optimize memory usage under mod_perl?" .IX Subsection "How can I optimize memory usage under mod_perl?" You should simply preload the Alzabo::Runtime module (which loads all the other modules it needs). .PP In addition, if you are using Alzabo::MethodMaker, make sure it runs in the parent. This module can create a lot of methods on the fly and each method eats up some memory. .PP Finally, you can preload one or more schema objects. The easiest way to do this is to simply pass its name to Alzabo::Runtime when you use it, like this: .PP .Vb 1 \& use Alzabo::Runtime qw( schema1 schema2 ); .Ve .SS "How can I get objects for tables linked via the Mason \s-1GUI\s0?" .IX Subsection "How can I get objects for tables linked via the Mason GUI?" .RS 4 For example, if I have a websites2categories table which maps a list of categories that a given web site should display \*(-- and uses website_id and category_id in a 1..n relationship \*(-- what is the proper way to set that up in the \s-1GUI\s0 and then in my code? .RE .PP In the \s-1GUI,\s0 you can simply create a relationship from websites to categories, and declare it n..n. Alzabo will automatically create a table called websites_categories, and you're free to change the name to whatever you want. .PP Then if you use \f(CW\*(C`Alzabo::MethodMaker\*(C'\fR, Alzabo will see that you have a table with 2 cols, both of which are part of the \s-1PK,\s0 and that it has 1..n relationships with 2 other tables, and it will create the appropriate methods. .PP You can see what methods are being created by setting the \&\f(CW\*(C`ALZABO_DEBUG\*(C'\fR environment variable to \*(L"\s-1METHODMAKER\*(R"\s0 before loading Alzabo::MethodMaker. It'll spit everything out to \s-1STDERR.\s0 There's also the generated documentation, which is available via the \f(CW\*(C`docs_as_pod()\*(C'\fR schema method after MethodMaker does its thing. .SH "AUTHOR" .IX Header "AUTHOR" Dave Rolsky,