DBIX :: OO :: Árvore

dbix :: OO :: Árvore é um módulo Perl para manipular dados hierárquicos usando o modelo "sets aninhados".
Baixe Agora

DBIX :: OO :: Árvore Classificação e resumo

Propaganda

  • Rating:
  • Licença:
  • Perl Artistic License
  • Preço:
  • FREE
  • Nome do editor:
  • Mihai Bazon
  • Site do editor:
  • http://search.cpan.org/~mishoo/DBIx-OO-v0.0.4/lib/DBIx/OO.pm

DBIX :: OO :: Árvore Tag


DBIX :: OO :: Árvore Descrição

DBIX :: OO :: Árvore é um módulo Perl para manipular dados hierárquicos usando o modelo "Nested Sets". DBIX :: OO :: Árvore é um módulo Perl para manipular dados hierárquicos usando os "conjuntos aninhados" modelo.synopsys Criar categorias de tabela (ID Integer insignado Auto_increment Chave Primária, Label Varchar (255), - Essas colunas são necessárias pelo DBIX: : OO :: Árvore Inteiro Integer Integer, LFT Integer Unsigned Not Null, RGT Integer Unsigned Not Null, MVG Tinyint Padrão 0, Índice (LFT), Índice (MVG), Índice (MVG)); * * * Categoria do pacote; usar a base 'dbix :: oo'; Use DBIX :: OO :: Árvore; __Package __-> Tabela ('Categorias'); __Package __-> Colunas (p => , e => ); # Nota Não é necessário declarar LFT, RGT, MVG ou pai. Nós declaramos o pai simplesmente porque pode ser útil, mas # DBIX :: OO: árvore funciona com SQL de baixo nível, portanto, não exige que o objeto DBIX: OO tenha esses campos. # O código abaixo cria a estrutura apresentada em Meu $ Eletronics = Category-> tree_apponend ({Label => 'Electronics'}); Minhas $ TVs = $ Eletronics-> Tree_Append ({Label => 'Televisores'}); Meu $ TUBE = $ TVs-> Tree_Append ({Label => 'Tube'}); Meu $ Plasma = $ TVs-> Tree_Append ({Label => 'Plasma'}); meu $ lcd = $ plasma-> tree_insert_before ({Label => 'LCD'}); Meu $ Portable = $ TVs-> tree_insert_after ({Label => 'eletrônica portátil'}); My $ MP3 = $ Portable-> Tree_Append ({Label => 'MP3 players'}); meu $ flash = $ mp3-> tree_apponend ({label => flash '}); Meu $ CDS = $ portable-> tree_appons ({Label => 'CD players'}); My $ Radios = Category-> Tree_Append ($ Portable-> ID, {Label => '2 vias Radios'}); # buscar e exibir uma subárvore Meus $ Data = $ Eletronics-> tree_get_subtree ({Fields => }); Meus $ níveis = categoria-> tree_compute_levels ($ dados); foreach my $ i (@ $ data) {imprimir '' x $ níveis -> {$ i -> {id}}, $ i -> {label}, "n"; } ## ou, crie objetos DBIX :: OO de dados retornados: Meu $ Array = Category-> init_from_data ($ data); Imprimir junção ("N", (Mapa {'' x $ níveis -> {$ _-> ID}. $ _-> Label} @ Matriz de $)); # Informações do caminho de exibição Meu $ Data = $ flash-> tree_get_path; Print Junte ("N", (Mapa {$ _-> {Label}} @ $ data)); # movimentação de nós em torno de $ mp3-> tree_reparent ($ lcd-> id); $ TVs-> Tree_Reparent ($ portable-> ID); $ CDs-> Tree_Reparent (Redef); $ plasma-> tree_move_before ($ tube-> ID); $ portable-> tree_move_before ($ eletronics-> id); # Excluir nós $ lcd-> tree_delete; este módulo é um complemento para o dbix :: OO para facilitar o armazenamento de árvores no banco de dados usando o "modelo de conjuntos aninhados", apresentado em . Sua principal ambição é ser extremamente rápida em recuperar dados (sacrificando para este desempenho de atualização - s, inserção-s ou delete-s). Atualmente, este módulo requer que você tenha essas colunas na tabela: - ID: tecla primária (inteiro) - pai: inteiro, referencia o nó pai (null para nós raiz) - LFT, RGT: armazenar a posição do nó - MVG: somente usado Ao mover nós "pai" e "MVG", não são exigidos por meio do modelo de conjuntos aninhados, conforme apresentado em , mas eles são necessários para este módulo funcionar. Em particular, "MVG" só é exigido por funções que movem nós, como a árvore_reparent (). Se você não quiser mover nós ao redor, você pode omitir "MVG" .Scunções .Retrievais devem ser muito rápidas (um SQL executado). Para promover ainda mais a velocidade, eles não retornam dbix :: OO abençoados objetos, mas uma série de hashes. É fácil criar objetos DBIX :: OO, se necessário, chamando DBIX :: OO-> init_from_data () (consulte o DBIX :: OO para mais informações). Informação / Excluir / Mover funções, no entanto, precisa garantir o Integridade da árvore. Aqui está o que acontece atualmente: - Tree_Append, tree_insert_before, tree_insert_after - estes execute um seleto e dois update-s (que potencialmente poderiam afetar muitas linhas). - Tree_Delete: Execute um Select, um delete e dois update-s. - Tree_Reparent - Executa 2 Select-S e 7 Update-s. Eu sei, isso parece horrível - se você tem ideias melhores, eu adoraria ouvi-los. Requisitos: · Perl.


DBIX :: OO :: Árvore Software Relacionado